Vlastní PresenterFactory v Nette 2.0.10

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
nanuqcz
Člen | 822
+
0
-

Ahoj,
snažím se napsat si vlastní PresenterFactory, ale nemůžu donutit Nette, aby ho použil namísto výchozího.

# config.neon
common:
	nette:
		presenterFactory:
			class: MyPresenterFactory
# MyPresenterFactory.php
class MyPresenterFactory extends Nette\Application\PresenterFactory
{

	public function __construct()
	{
		die('MyPresenterFactory::__construct()');
	}

}

Ale žádný die('MyPresenterFactory::__construct()'); se neprovede. Temp jsem mazat zkoušel :-)

Byla tato feature z Nette odstraněna? Protože podle dokumentace by to mělo fungovat…

Díky

castamir
Člen | 629
+
0
-

Ten úsek dokumentance doplnil sám David (14. 3. 2013, 21:42 by David Grudl – přidána konfigurace nette ). Otázkou je, jestli to nebylo vypuštěno předčasně pro novější verzi (2.1?). Něco podobného jsem totiž ještě nezkoušel…

nanuqcz
Člen | 822
+
0
-

Právě zmínky o tomhle jsem našel ve vláknech na fóru i několik měsíců starých. Takže o žádnou novinku IMHO nejde.

enumag
Člen | 2118
+
0
-

Má to být takhle:

common:
    services:
        nette.presenterFactory:
            class: MyPresenterFactory

V dokumentaci je to správně, špatně jsi to opsal. Anebo možná nechápeš rozdíl mezi nette: a services:, mám vysvětlit? ;-)

Editoval enumag (13. 4. 2013 19:50)

nanuqcz
Člen | 822
+
0
-

enumag: Jo, máš pravdu, toho bych si nevšiml.

Automaticky jsem předpokládal, že všechno, co se týče konfigurace Nette, patří do „nette“ sekce (stejně jako třeba „nette.database“, taky není v „services.nette.database“).

Každopádně moc díky, takhle už to funguje :-)

enumag
Člen | 2118
+
0
-

@nanuqcz: Do sekce nette: patří základní (high-level) konfigurace, tedy třeba údaje pro připojení k databázi. A není to nette.database, ale nette: \n database: \n .... Pokud bys ale chtěl např. vyměnit třídu Connection za vlastní implementaci, musel bys to udělat low-level, takhle:

services:
	nette.database.default:
		class: MyConnection

Tím chci jen ukázat že nette.database v services je také. Jo a mimochodem nepleť si ty tečky a dvojtečky, ta tečka nemá pro neon absolutně žádný význam, respektive stejný jako libovolné písmeno název služby je „nette.presenterFactory“ – nejde to nijak dělit na části. To nette. je jen prefix (namespace), který znamená, že tu službu vytvořilo NetteExtension.

nanuqcz
Člen | 822
+
0
-

Aha, díky za vysvětlení, o tom jsem nevěděl. Ani o tom rozdělení na „high-level“ věci, ani o tom rozdílu tečka/dvojtečka :-)

castamir
Člen | 629
+
0
-

Je to maličko matoucí a to vzhledem k použití u parametrů

	parameters:
		database:
			driver: mysql
			host: ...
			user: ...

a přístup ke konkrétním prvkům parametru database

	nette:
		database:
			user: %database.user%

tadu to skutečně vypadá, že database není jen prefix. Jasně, k parametrům se přistupuje přes %% a k ostatnímu (služby) přes @, ale ne každému to hned dojde ;)

enumag
Člen | 2118
+
0
-

@castamir: Tak jistě. :-D Mi to došlo až když jsem studoval jak funguje CompilerExtension.

@nanuqcz: Doporučuji ti nastudovat si kód NetteExtension a naučit se psát vlastní rozšíření. ;-)
Jo a nenech se zmást tím, že některé služby nette (jako router nebo user) nemají ten nette prefix – to má čistě historický důvod a bude se to měnit.

Editoval enumag (13. 4. 2013 22:50)