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