BadRequestException #404, No route for HTTP request

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

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

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…

MzK
Člen | 127
+
0
-

Bohužel nepomohlo.. /sdfsdf/sdfsdf/sdf stále zobrazí BadRequestException #404

Mikulas Dite
Člen | 756
+
0
-

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

Když odkomentuji $application->catchExceptions = TRUE; tak se mi error šablony už zobrazují, díky to bylo ono…

MzK
Člen | 127
+
0
-

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
	}
}
?>
MzK
Člen | 127
+
0
-

V error presenteru nefunguje $this->redirect → hned to zkončí z chybou.
Vyřešil sem takto:

<?php
$uri = new Uri(Environment::getHttpRequest()->getUri());
if ($uri->getPath() != '/404/') {
	header('Location: /404/'); // protože $this->redirect nešlo
	die();
}
?>
Ondřej Mirtes
Člen | 1536
+
0
-

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

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/‘