Zvláštní 404 pro moduly
- grogy
- Člen | 147
Lze udělat pro každý modul jinou stránku s 404 (popř. 500)? Zkusil jsem do modulu hodit ErrorPresenter s templatkama, ale nechce se Nette brát tyto nové soubory v potaz. Musí se něco nastavit?
Nette 0.9.2 stable, $application->errorPresenter = ‚Error‘ v bootstrapu samozřejmě nastaven
- Michalek
- Člen | 211
Taky si nejsem jistý, ale pokud se přímo v modulu přepíše
ErrorPresenter pomocí
$application->errorPresenter = 'Admin:Error';
tak se ErrorPresenter teoreticky hledá v adresáři s modulem, pokud to
pomůže.
- grogy
- Člen | 147
$application->errorPresenter = 'Error';
Je veřejnou proměnnou, tam jen ukládáš kde ten presenter Nette má hledat.
Tzn. pokud nebudu mít v app složce složku (presenters – kde mám uložná BasePresenter a BaseAdminPresenter a pak template kde budou phtml šablony) tak to tak nastavím, aby se vůbec error zprávy zobrazily. Ovšem pro každý jiný modul toto řešení nepůjde.
- David Grudl
- Nette Core | 8227
grogy napsal(a):
Lze udělat pro každý modul jinou stránku s 404 (popř. 500)? Zkusil jsem do modulu hodit ErrorPresenter s templatkama, ale nechce se Nette brát tyto nové soubory v potaz. Musí se něco nastavit?
Nejsnadněji asi tak, že (base) presenter každého modulu si ve startup()
nastaví $this->getApplication()->errorPresenter = '...'
.
- Savannah
- Člen | 30
chtěl bych se ještě zeptat, jak správně na jména toho errorPresenteru. Mám:
app/AdminModule/presenters/ErrorPresenter.php:
class Admin_ErrorPresenter {
public $oldLayoutMode = FALSE;
public $oldModuleMode = FALSE;
public function renderDefault($exception)
{
if ($this->isAjax()) { // AJAX request? Just note this error in payload.
$this->getPayload()->error = TRUE;
$this->terminate();
} elseif ($exception instanceof BadRequestException) {
$this->setView('404'); // load template 404.phtml
} else {
$this->setView('500'); // load template 500.phtml
Debug::processException($exception); // and handle error by Nette\Debug
}
}
}
a v Admin_BasePresenteru ve startupu nastavím
$this->getApplication()->errorPresenter = 'Admin:Error';
ale když v nějakém potomku Admin_BasePresenteru vyhodím jakoukoli výjimku, tak dostanu internal server error.
S tim, že ta default akce errorPresenteru se ani nevykoná, když tam dám die(..), tak to neudělá rozdíl.