Zend framework – Configurer la gestion des erreurs

Voici un petit tutoriel pour créer un contrôleur de gestion des erreurs dans Zend. La mise en place de ce contrôleur permet de rediriger les utilisateurs vers une page spécifique en fonction de l’erreur rencontrée.

Premièrement modifiez le fichier bootstrap.php et ajoutez-y la ligne suivante:

<?php
...
ini_set('display_errors', 1);
... ?>

Cela permet de définir s’il faut afficher le détail des erreurs ou non.

Créez ensuite le fichier ErrorController.php dans le dossier controllers de votre projet Zend avec le contenu suivant:

<?php

class ErrorController extends Zend_Controller_Action
{
    public function init()
    {

    }
	
    public function errorAction()
    {
        //récupération des erreurs
	    $errors = $this->_getParam('error_handler');
        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // erreur 404 -- contrôleur ou action introuvable
                // redirection vers error404Action
				$this->_forward('error404');
				
                break;
            default:	
				//ereur 500 -- Internal server error
                // redirection vers error500Action avec le détail de l'erreur
				$this->_forward('error500',null,null,array('exception'=>$errors->exception));
                break;
        }

    }
	
    public function error404Action()
    {
        //Ne pas oublier de créer le fichier error404.phtml dans votre projet.
	    $this->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
	    $this->view->message= "erreur 404 page introuvable";
    }
	
    public function error500Action()
    {
        //Ne pas oublier de créer le fichier error500.phtml dans votre projet.
	    $exception = $this->_getParam('exception');
        //Envoi le détail de l'erreur dans la vue si le paramètre display_errors a été mis a true
	    if(ini_get('display_errors')){
		    //Récupération des informations de l'erreur et envoi vers la vue.
		    $this->view->message = $exception->getMessage();
		    $this->view->trace = $exception->getTraceAsString();
	    }
		//Log du detail de l'erreur dans un fichier	
		$log =
			new Zend_Log(
				new Zend_Log_Writer_Stream(
					'../log/errors.log')
			);
		$log->debug($exception->getMessage()
				  . "\n"
				  . $exception->getTraceAsString());
		
	}
}

?>

Voila, l’application est prête à rediriger vos utilisateurs. N’oubliez pas de changer le paramètre display_errors lors de la mise en production ;).

Une réflexion au sujet de « Zend framework – Configurer la gestion des erreurs »

  1. C’est trop cool, ça m’a baucoup aider. Moi j’ai configurer le log dans le boostrap comme suite :
    $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH.$config->logfile);
    // dans application.ini j’ai une ligne [production]: logfile = /logs/log.log
    $log = new Zend_Log($writer);
    Zend_Registry::set(‘log’, $log);

    dans le fichier ErrorController et partout où j’ai besoin du log je recupère : $log=Zend_Registry::get(‘log’);

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *