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

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

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('@', '&#64;', $str);
	}
}