Společný ErrorPresenter pro více modulů

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

Zdravím, příjde mi, že je to hodně banální věc, ale nedaří se mi ji rozchodit.

Našel jsem několik otázek podobného typu:

https://forum.nette.org/…r-v-modulech

http://www.egoblog.cz/…-v-modulech/

a nebo

https://forum.nette.org/…o-dva-moduly

Moje struktura aplikace je následující:

app
   FrontModule
   AdminModule

Tohle je diskutovaná část mého config.neon:

application:
	errorPresenter: Error
	mapping:
		*: *Module\*Presenter

Zkoušel jsem si třeba vytvořit nový modul s názvem ErrModule do kterého jsem dal ErrorPresenter.php a Error4xxPresenter.php a pak v configu errorPresenter: Err:Error. A pořád mi to na produkčním vyhazovalo chybu chybu:

Cannot load presenter 'Error', class 'ErrorPresenter' was not found.

Pak jsem ještě zkusil v bootstrapu přímo nastavit tohle:

$container->getService('application')->errorPresenter = 'Err:Error';

Chyba se změnila na:

Cannot load presenter 'Error4xx', class 'Error4xxPresenter' was not found.

Tak jsem si řekl aspoň posun, ale dál jsem se už nedostal.

Nechci do každého modulu rvát zvlášť ErrorPresentery (a tím duplikovat kód), chci mít prostě tuto záležitost na jednom místě.

emmil
Člen | 26
+
0
-

Tak jsem se posunul ještě o trochu dál nebo spíše k výsledku. Prohlídl jsem si letmě kód v ErrorPresenter.php a všiml jsem si následujícího řádku:

return new Nette\Application\Responses\ForwardResponse($request->setPresenterName('Error4xx'));

Tak jsem si řekl proč nezkusit přidat Err: před Error4xx a funguje.

Takže mě z toho hned napadá jeden doplňující dotaz:

Proč musím v boostrap.php nastavovat Err:Error presenter jako jsem nastínil v mém tématu výše když to samé by přece mělo fungovat v config.neon, ale nefunguje.

Editoval emmil (22. 4. 2016 23:12)

Jiří Nápravník
Člen | 710
+
+1
-

Máš to application v neon pod sekci nette?

já mám tohle a bez problémů:

	nette:
			application:
				errorPresenter: Core:Error
emmil
Člen | 26
+
0
-

@JiříNápravník Díky moc, přidání nette: pomohlo. Můžu se zeptat, kde to mohu najít v dokumentaci, že by tam mělo být před tím nette:?

jiri.pudil
Nette Blogger | 1029
+
0
-

Zařazení v sekci nette je potřeba ve 2.2. V Nette 2.3 už by to mělo fungovat i bez toho.

David Grudl
Nette Core | 8179
+
0
-

nette: se používalo ve verzi 2.2, v 2.3 tam být nemusí (ale může).

emmil
Člen | 26
+
+1
-

@jiri.pudil @DavidGrudl Používám nejnovější verzi nainstalovanou přes composer, takže 2.3 a bez nette: to nefungovalo.

EDIT:

Promazal jsem ještě jednou cache (udělal jsem to už několikrát předtím, ale asi ne ve správně kombinaci :)) a začalo to fungovat i bez nette: takže moje blbost, díky moc za reakce.

Editoval emmil (23. 4. 2016 13:47)

David Grudl
Nette Core | 8179
+
0
-

Na produkčním serveru je potřeba mazat cache při každé změně.