Připojení layoutu k errorPresenter (404)
- grogy
- Člen | 147
Zdravím,
narazil jsem na problém, chtěl bych vyřešit připojení layoutu
k errorPresenteru, který generuje 404ky a 500. V presenteru jsem vytvořil
metodu createTemplate() a v render Default jsem přidal pomocí metody
setLayout(); název layoutu. A ono nic.
(Kopírovat obsah layoutu do pohledu mi nepříjde košér, proto chci toto řešení, – s Nette začínám)
- grogy
- Člen | 147
Tento web je tak jednoduchý, že dokonce se napoužívá ani struktura: example.com/presenter/action ale pomocí routy jen example.com/action – takže moduly tam nejsou.
(Právě i to mě zaskočilo, že se nehodí defaultní layout standartně, že by se spíš musel podle mě vypínat či nastavovat jiný..)
- grogy
- Člen | 147
Tak to je divný, přesto to nejde (stáhnul jsem i novou revizi Nette), soubor @layout.phtml také existuje, ErrorPresenter mám:
<?php
class ErrorPresenter extends Presenter
{
/**
* @return void
*/
public function renderDefault($exception)
{
if ($this->isAjax()) {
$this->getPayload()->events[] = array('error', $exception->getMessage());
$this->terminate();
} else {
$this->template->robots = 'noindex,noarchive';
if ($exception instanceof BadRequestException) {
Environment::getHttpResponse()->setCode($exception->getCode());
$this->template->title = '404 Not Found';
$this->setView('404');
} else {
Environment::getHttpResponse()->setCode(500);
$this->template->title = '500 Internal Server Error';
$this->setView('500');
Debug::processException($exception);
}
}
}
}
?>
Editoval grogy (21. 7. 2009 12:26)
- grogy
- Člen | 147
Tak jsem našel chybu u mě, a pravděpodobně i ve frameworku. V bootstrap.php chyběl řádek:
<?php
$application->errorPresenter = "Error";
?>
Teď už to běží v pohodě včetně nahrávání těch layoutů.
Ovšem připadne mi to jako nesprávné chování Nette, že pokud chybí tento řádek, že se přesto pohled zobrazí – akorát bez layoutu okolo. – fixnout?