Zvláštní 404 pro moduly

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

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

Honza Kuchař
Člen | 1662
+
0
-

Nejsem si jistý, ale mám takový pocit, že je to zatím jen v plánu.

grogy
Člen | 147
+
0
-

Aha, proto jsem nic nenašel. Myslím, že by to bylo vhodné (pro Front část mít 404 odlišnou než pro administraci). Díky

Michalek
Člen | 210
+
0
-

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.

https://forum.nette.org/…ura-a-moduly#…

grogy
Člen | 147
+
0
-
$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 | 8149
+
0
-

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
+
0
-

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.