Opis
ArtykuÅ‚ zaprezentuje jak dodać obsÅ‚ugÄ™ wyjÄ…tków serwera: 404 czyli page not found oraz 500 błąd aplikacji.
UWAGA przykład działa w oparciu o Smarty i nie zadziała prawidłowo na domyślnych ustawieniach Zenda.
Implementacja
Przedewszystkim musimy stworzyć plik kontrolera, który bÄ™dzie odpowiedzialny za rozróżnienie błędu strony. DomyÅ›lnie Zend Controller Action obsÅ‚uguje błędy i wyjÄ…tki za poÅ›rednictem ErrorController'a. Należy pamiÄ™tać, aby zmienić nazwÄ™ klasy po "extends" na wÅ‚asnÄ… (jeÅ›li posiadamy wÅ‚asny fron kontroller bÄ…dź na domyÅ›lnÄ… czyli: Zend_Controller_Action.
Listing 1.0 pokazuje kod dla ErrorControllera który powinien być w katalogu application/controllers
Następnie tworzymy view o nazwie error.tpl w folderze: application/views/error/ aby wyświetlić kod HTML (listing 2.0).
Kolejnym krokiem jest zmodyfikowanie pliku layout.tpl, który jest odpalany za każdym razem przez front kontrolera. NastÄ™puje tutaj instrukcja warunkowa, która sprawdza czy jakiÅ› wyjÄ…tek zostaÅ‚ wyÅ‚apany (listing 3.0)
OstatniÄ… rzeczÄ… jakÄ… nam zstaÅ‚a to modyfikacja BOOTSTRAPA (czyli index.php w public), wystarcczy dodać linie do wyÅ›wietlania wyjÄ…tków (listing 4.0)
Listing
<?php
class ErrorController extends User_Controller_Action {
function init() {
parent::init();
$this->view->baseUrl = $this->_request->getBaseUrl();
}
public function errorAction() {
$errors = $this->_getParam('error_handler');
switch($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
//404 error controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found';
break;
default:
//app error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = 'Application error';
break;
}
$this->view->exception = $errors->exception;
$this->view->request = $errors->request;
}
}
//listing 2.0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Error</title>
<link rel="stylesheet" type="text/css" media="screen"
href="{$baseUrl}/public/styles/styles.css" />
</head>
<body>
<div class="page">
<h1>An error occurred</h1>
<h2>{$message}</h2>
<br />
<p>
<b>Message:</b> {$exception->getMessage()}
</p>
<br /><br />
<h3>Stack trace:</h3>
<pre>{$exception->getTraceAsString()}</pre>
<br /><br />
<h3>Request parameters:</h3>
<pre>{$request->getParams()|var_dump}</pre>
</div>
</body>
</html>
//listing 3.0
{if $exception}
>>Tutaj nasz content dla błędów 404 i 500
{$layout->content}
{else}
>>Tutaj nasz content dla normalnych stron
{$layout->content}
{/if}
//listing 4.0
$frontController->throwExceptions(false);
Ranga: Administrator serwisu Punktów: 38473

