BadRequestException #404, No route for HTTP request
- MzK
- Člen | 127
Pokud zavolám následující url /imgsdf/sdf/sfd
tak se mi
zobrazí výše uvedená chyba…
Samozřejmě ErrorPresenter.php mám
<?php
class ErrorPresenter extends BasePresenter {
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
}
}
}
?>
V bootstrap.php mám také:
<?php
$application->errorPresenter = 'Error';
//$application->catchExceptions = TRUE;
?>
A konečně šablony mám vytvořené následující: Error/default.phtml,
404.phtml..
Stejně to nejde. Protože to píše No route for HTTP request, smazal jsem
všechny routy co mám vytvořeny. Když pak zadám tu chybou stránky
coslkf/cokoliv/neco
tak se to přesměruje na /
index.
Takže šablona ani routa se prostě nezobrazí..
Už nevím kudy kam, do skeletonu sem koukal, tam nic extra není, jen výše
uvedené, což jsem opsal :*(
- Mikulas Dite
- Člen | 756
Jestli ti jde o to zobrazit error presenter, odkomentuj catchExceptions, resp.
$application->catchExceptions = Environment::isProduction();
to mě naučil Ondřej Mirtes, je to lepší než pouze true…
- Mikulas Dite
- Člen | 756
Protože to co sem ti poradil to povolí na produkčnim serveru, na localhostu můžeš normálně ladit. Pokuď se chceš mrnout na error presenter na localu, tak tam dej prostě true ;)
- MzK
- Člen | 127
Potřeboval bych ještě drobnost:
Jak nastavit jednu chybovou URL?
Tedy aby se
/stranka-co-neexistuje/cokoliv-nebo-nic
přesměrovala na
/404/
Teď to mám nastavené tak, že se mi každá chybová
stránka podstrčí místo aby se přesměrovala..
Pokud do ErrorPresenteru dám
<?php
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->redirect('Error:default');
$this->redirect('Page:Chyba'); // nejde
die();
Environment::getHttpResponse()->setCode($exception->getCode());
$this->setView('404'); // load template 404.phtml
}
else {
$this->setView('500'); // load template 500.phtml
Debug::processException($exception); // and handle error by Nette\Debug
}
}
?>
- Ondřej Mirtes
- Člen | 1536
Přesměrování bys dělat neměl, poslání HTTP kódu 404 stačí a uživatel aspoň vidí, jaká ta vadná URL je.
- SyXcz
- Člen | 75
nemáš tu stejnou chybu jako v tom druhém příspěvku? v routách si měl
<?php
$router[] = new Route('/404/', array(
'presenter' => 'Eror',
'action' => 'default',
));
?>
máš tam jen jedno „r“ (Eror → Error)… jinak s tim lomítkem nevim jestli to takhle maká, ale nechal bych to spíš jen ‚404/‘