Jak vyhodit Error 404 z presenteru
- Honza Kuchař
- Člen | 1662
Vyhodíš tu exception co vyhazuje normálně Nette. Pusť si Laděnku a přejdi na stránku, která neexistuje. To už pak uvidíš…
- Šaman
- Člen | 2666
Podle toho jak to mas osetrene v ErrorPresenteru.
Tohle by melo vyhodit 404:
<?php
class ErrorPresenter extends Presenter
{
/**
* @param Exception
* @return void
*/
public function renderDefault($exception)
{
$this->setLayout('error');
$this->template->title = "Chyba aplikace!";
if ($this->isAjax()) { // AJAX request? Just note this error in payload.
$this->payload->error = TRUE;
$this->terminate();
} elseif ($exception instanceof BadRequestException) {
$this->setView('404'); // load template 404.phtml
} elseif ($exception instanceof CookiesDisabledException) {
$this->setView('cookiesError'); // load template cookiesError.phtml
} else {
$this->setView('500'); // load template 500.phtml
Debug::processException($exception); // and handle error by Nette\Debug
}
}
}
// CookiesDisabledException je moje vlastni vyjimka, tu tam nepotrebujes
?>
- ZETCHA
- Člen | 59
Chybička byla u mě, měl jsem špatně nastavený
$application->errorPresenter.
Ale stejně s tím bojuji. Teď je nastaven již správně, ale místo šablony
404 co jsem si připravil stále zobrazuje výchozí 404 hlášení
z Aplication. Ten errorPresenter našel (když do default dám echo …,
vypíše). Nějak v tom bloudím.
Tušíte kde by mohl být zádrhel?
Editoval ZETCHA (26. 5. 2010 12:52)
- ZETCHA
- Člen | 59
V bootstrapu to mám takto:
<?php
$application = Environment::getApplication();
$application->errorPresenter = 'Front:Error';
$application->catchExceptions = TRUE;
?>
Adresářová struktura:
<?php
app
AdminModule
controls
FrontModule
models
presenters
ErrorPresenter.php
templates
Error
404.phtml
500.phtml
default.phtml
models
presenters
.htaccess
bootstrap.php
config.ini
?>
ErrorPresenter:
<?php
class Front_ErrorPresenter extends BasePresenter
{
public function renderDefault($exception)
{
if ($this->isAjax()) { // AJAX request? Just note this error in payload.
$this->payload->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
}
}
}
?>
Editoval ZETCHA (26. 5. 2010 13:25)
- ZETCHA
- Člen | 59
Máš pravdu, byl jsi o 2 minuty rychlejší. Ale i tak to nejede, ale našel jsem v logu
[2010–05–26 13–57–33] PHP Fatal error: Uncaught exception ‚ApplicationException‘ with message ‚An error occured while executing error-presenter‘ in X:\webs\exvalos.loc\libs\Nette\Application\Application.php:173
Budu muset pohledat. Ale dík.