ErrorPresenter – getParameter()
- David Matějka
- Moderator | 6445
class ErrorPresenter ...
{
public function actionDefault(\Exception $exception, \Nette\Application\Request $request = NULL)
{
...
}
}
viz api: https://api.nette.org/…Request.html
Editoval matej21 (29. 9. 2014 19:46)
- David Matějka
- Moderator | 6445
upravil jsem ten priklad, asi bude nutny nastavit defaultni hodnotu
$request
na NULL
- OKweb
- Člen | 12
Áno, po pridaní defaultnej hodnoty už nedáva error 500, tento kód funguje, teda dáva error 404:
<?php
namespace App\Presenters;
use Nette,
Nette\Application\Request,
App\Model,
Tracy\Debugger;
/**
* Error presenter.
*/
class ErrorPresenter extends BasePresenter
{
/**
* @param Exception
* @return void
*/
public function renderDefault(\Exception $exception, \Nette\Application\Request $request = NULL)
{
$this->template->maintenance = $this->isMaintenance();
//$this->template->product = $request->getPresenterName();
//$this->template->product = http_build_query($parameters);
if ($exception instanceof Nette\Application\BadRequestException) {
$code = $exception->getCode();
// load template 403.latte or 404.latte or ... 4xx.latte
$this->setView(in_array($code, array(403, 404, 405, 410, 500)) ? $code : '4xx');
// log to access.log
Debugger::log("HTTP code $code: {$exception->getMessage()} in {$exception->getFile()}:{$exception->getLine()}", 'access');
}
else {
$this->setView('500'); // load template 500.latte
Debugger::log($exception, Debugger::EXCEPTION); // and log exception
}
if ($this->isAjax()) { // AJAX request? Note this error in payload.
$this->payload->error = TRUE;
$this->terminate();
}
}
}
?>
Ale akonáhle chcem použiť nejakú metódu $request->…, tak mi dáva opäť error 500.
- David Matějka
- Moderator | 6445
To je tedy 404 „No route found…“. Kdyz nedoslo k nalezeni routy,
nedoslo ani k vytvoreni prvniho aplikacniho pozadavku. Tudiz
$request
je null a neni mozno zjistit jeho parametry… jaky
parametr konkretne potrebujes? Jestli nejaky, ktery neni zavisly na routovani,
ale je vzdy v url, tak si injectni Nette\Http\IRequest
Editoval matej21 (30. 9. 2014 10:26)
- OKweb
- Člen | 12
Ono route nájde, lebo mám na konci takú všeobecnú, ktorá vyhovie, ale nenájde príslušný presenter zodpovedajúci danej route:
Nette\Application\BadRequestException #404
Cannot load presenter ‚Test‘, class ‚App\Presenters\TestPresenter‘ was
not found
Caused by
Nette\Application\InvalidPresenterException
Cannot load presenter ‚Test‘, class ‚App\Presenters\TestPresenter‘ was
not found
Potom to spadne do ErrorPresenter a v ňom by som chcel využiť parameter z routy. TRACY mi na tej lište príslušné parametre z routy korektne zobrazí.