Loading:

Zaplanuj Przeprowadzke - Ściągnij Darmową Aplikację na Androida

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);


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=12721

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: divix
Ranga: Administrator serwisu Punktów: 37169
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-17 v.1.5 | design: diviXdesign & rainbowcolors