Loading:


Tworzenie strony 404 oraz 500 w Zend Framework i Smarty

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)

 

 



Napisz Artyku³

Listing

//listing 1.0
<?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);




Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38523
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors