Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-11-2008 12:28:47

iLoLo21
Membre
Date d'inscription: 17-07-2008
Messages: 13

Controller d'erreur avec ErrorHandler

Bonjour.

J'essaye de faire fonctionner le script de Julien Pauli : http://julien-pauli.developpez.com/tuto … ceptions2/

Rien de très complexe à priori. Mais les erreurs ne semblent pas être remonté par ce nouveau controller que je défini.

En effet je place un echo et un exit dans le controller pour etre sur que les erreurs remontent par la, mais zend continue de m'afficher une erreur classique.

Exemple avec un mauvais nom d'action :

Code:

Action "index" does not exist and was not trapped in __call()

Mon controller :

Code:

class ErrorController extends Zend_Controller_Action
{

private $_exception;
    private static $errorMessage;
    private static $httpCode;
    
    public function preDispatch()
    {
        
        echo 'test';exit;
        
        
        $this->_helper->viewRenderer->setNoRender(true); // ne rend aucune vue automatiquement
        $this->_exception = $this->_getParam('error_handler');
      $this->_response->clearBody(); // on vide le contenu de la réponse
        $this->_response->append('error',null); // on ajoute un segment 'error' dans la réponse
        
        switch ($this->_exception->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                self::$httpCode = 404;
                self::$errorMessage = 'Page introuvable';
            break;
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER:
                switch (get_class($this->_exception->exception)) {
                    case 'Zend_View_Exception' :
                        self::$httpCode = 500;
                        self::$errorMessage = 'Erreur de traitement d\'une vue';
                    break;
                    case 'Zend_Db_Exception' :
                        self::$httpCode = 503;
                        self::$errorMessage = 'Erreur de traitement dans la base de données';
                    break;
                    case 'Metier_Exception' :
                        self::$httpCode = 200;
                        self::$errorMessage = $this->_exception->exception->getMessage();
                    break;
                    case 'Autre_Exception' :
                        self::$httpCode = 500;
                        self::$errorMessage = 'Exemple avec une "autre exception"';
                    break;
                    default:
                        self::$httpCode = 500;
                        self::$errorMessage = 'Erreur inconnue';
                    break;
                }
            break;
        }
        
    }
    
    public function errorAction()
    {
        
        echo 'ici';exit;
        
        $this->getResponse()->setHttpResponseCode(self::$httpCode);
        $this->_errorMessage .= sprintf("<p>%s</p>",self::$errorMessage);
    }
    
    public function postDispatch()
    {
        $this->getResponse()->appendbody($this->_errorMessage,'error');
        $this->getResponse()->appendbody('<a href="javascript:history.back()">retour</a>','error');
        if (Zend_Registry::get('config')->debug == 'true') {
            $message = sprintf('<hr>DEBUG INFOS :<br /><strong>Exception de type <em>%s</em> <u>%s</u> envoyée dans %s à la ligne %d </strong> <p>Stack Trace : %s </p><hr>',
                                get_class($this->_exception->exception),
                                $this->_exception->exception->getMessage(),
                                $this->_exception->exception->getFile(),
                                $this->_exception->exception->getLine(),
                                Zend_Debug::dump($this->_exception->exception,null,false)
                               );
            $this->getResponse()->append('debug',$message);
        }
    }

Lorsque je fais un echo de front->getPlugin('Zend_Controller_Plugin_ErrorHandler'); le plugin semble bien défini...

Une idée pour que je puisse vérifier que le plugin est bien actif ?

Mon bootsrap contient bien la ligne :

Code:

$front->throwExceptions(true);

et

Code:

$plugin = new Zend_Controller_Plugin_ErrorHandler();
$plugin->setErrorHandlerModule('error')
       ->setErrorHandlerController('error')
       ->setErrorHandlerAction('error');
$front->registerPlugin($plugin);

Dernière modification par iLoLo21 (10-11-2008 12:30:20)

Hors ligne

 

#2 11-11-2008 11:12:45

Zedo
Nouveau membre
Date d'inscription: 23-09-2008
Messages: 1

Re: Controller d'erreur avec ErrorHandler

Hello,

d'après la doc:

throwExceptions($flag) est utilisée pour activer/désactiver la possibilité de lever des exceptions durant le processus de dispatching. Par défaut, les exceptions sont récupérées et placées dans l'objet réponse ; activer throwExceptions() surchargera ce comportement et indiquera au contrôleur frontal de ne pas enregistrer le plugin de gestion des erreurs : ErrorHandler.

donc:

Code:

$front->throwExceptions(false);

@+

Hors ligne

 

#3 12-11-2008 10:04:11

iLoLo21
Membre
Date d'inscription: 17-07-2008
Messages: 13

Re: Controller d'erreur avec ErrorHandler

Merci ! je me doutais bien que c'était un truc de ce genre que j'avais oublié.

Ca marche nikel.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages