Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 06-10-2011 15:01:52

Claudius
Nouveau membre
Date d'inscription: 17-08-2010
Messages: 1

Problème de gestion d'erreur

Au bureau j'ai une application Zend pour laquelle je n'arrive pas à correctement gérer les erreurs.

Le site ne devant pas afficher de stack trace, il faut réussir à ce qu'il n'y ai aucun affichage d'erreur autre que ceux que nous souhaitons définir (contenu inexistant, url incorrecte ....)

L'application utilise les modules et j'ai tenté de mettre en place un controlleur ErrorController et la vue qui va bien

class Default_ErrorController extends Zend_Controller_Action
{
   
    private $_exception;
    private static $errorMessage;
    private static $httpCode;

    public function preDispatch()
    {
        $this->_exception = $this->_getParam('error_handler');

        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;
                        default:
                                self::$httpCode = 500;
                                self::$errorMessage = 'Erreur inconnue : '.   $this->_exception->exception->getMessage();                               
                        break;
                }
            break;
        }

    }

    public function errorAction()
    {
        $this->view->message = self::$errorMessage;
        $this->view->httpCode = self::$httpCode;

    }
}
?>

Pourtant malgré cela et d'autres tentatives rien n'y fait, le controller ne prends pas la main. Les parties incriminées sont même encapsulées par des try catch j'ai toujours la stack trace qui s'affiche. certaines erreur sont bien récupérées par ce controlleur mais j'ai du mal à prédire lesquelles.

Le projet a une structure classique il me semble :

Projet
-- application
---- configs
---- controllers
------ ErrorController
---- layout
---- models
---- modules
------ default
-------- controlleur 1
-------- controlleur 2
-------- ErrorController
------ module 1
------ module 2
-- public
------ css
------ images
------ js
------ index.php

Dans l'exemple le plus récent c'est une exception non catchée dans une des classes de models. (pour être exact un fichier xml mal formé fourni par un prestat externe duquel il faut extraire quelques données. Pas de chance pour moi le fichier n'est pas vide juste mal formé)

Nous avons tenté de modifier le fichier config application.ini afin de mettre à 1 la ressource resources.frontController.params.displayExceptions = 0 => aucun effet

Si quelqu'un pouvait prendre un peu de son temps pour m'expliquer comment faire, une gestion des erreurs propre je l'en remercie d'avance. Pas la peine de me renvoyer direct vers la doc je l'ai lu et j'ai pas du bien la saisir. Sinon ça marcherait of course ^^.

Dernière modification par Claudius (06-10-2011 15:04:11)

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