Připojení layoutu k errorPresenter (404)

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

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)

cuga
Člen | 210
+
0
-

pokud das errorPresenter jako soucast nejakeho modulu, napr. Front, tak se ti pouzije @layout.pthml sablona toho modulu a mel bys vystarano…

grogy
Člen | 147
+
0
-

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ý..)

pmg
Člen | 372
+
0
-

Vkládá se soubor @{layout}.phtml, kde {layout} je nastavené jméno, pokud jsi ale layout nevypínal, měl by se použít automaticky.

grogy
Člen | 147
+
0
-

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

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?

ic
Člen | 430
+
0
-

To že schází

$application->errorPresenter = „Error“;

dává možnost nazvat si chybovou stránku jinak, třeba „chybovka“ (chybovkaPresenter, atd.)

viděl bych to spíše jako feature než @todo