error presenter, biela strana
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- mino
- Člen | 16
ked pustim:
mojaapp.com/neexistujuci
vyhodi mi pekne moju 404ku
ked vsak vytvorim v presenteri vytvorim chybu napriklad pouzijem nedefinovanu premennu uzivatelovy to hodi len bielu stranu a chyba sa normalne zalohuje.
Miesto bielej strany by som chcel vratit error hlasku. Napriklad 500 alebo aj inu to je jedno len aby tam nebola iba biela strana. Ako na to?
bootstrap:
<?php
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
$application->catchExceptions = TRUE;
?>
ErrorPresenter.php:
<?php
class ErrorPresenter extends BasePresenter
{
/**
* @param Exception
* @return void
*/
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
}
}
}
?>
Editoval mino (6. 6. 2010 11:32)
- Aurielle
- Člen | 1281
A máš vytvořené příslušné šablony? Jinak chybovou zprávu můžeš předávat přes exception message, nějak takto:
/**
* Error presenter
*/
class Viewer_ErrorPresenter extends Presenter
{
public $oldLayoutMode = FALSE;
public $oldModuleMode = FALSE;
public function beforeRender()
{
$this->template->registerHelper('email', get_class($this) . '::email');
$this->template->gamingsite = Environment::getConfig('gamingsite');
}
public function actionDefault($exception)
{
if($exception instanceof BadRequestException)
{
Environment::getHttpResponse()->setCode(404);
$this->setView(404);
}
else
{
Environment::getHttpResponse()->setCode(500);
$this->setView(500);
Debug::processException($exception);
}
}
public function render404($exception)
{
$this->setLayout(FALSE);
$this->template->msg = ($exception instanceof NotFoundException) ? $exception->getMessage() : '';
$find = Environment::getHttpRequest()->getUri()->getHostUri();
$this->template->path = str_replace($find, '', Environment::getHttpRequest()->getUri()->absoluteUri);
}
public function render500($exception)
{
$this->setLayout(FALSE);
$this->template->msg = $exception->getMessage();
}
public static function email($str)
{
return str_replace('@', '@', $str);
}
}