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: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors