Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-02-2010 17:30:00

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

[Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Bonjour à tous big_smile

Je suis nouveau avec Zend et l'utilise depuis deux petits mois maintenant, et aurais une petite question à vous poser :

est-il possible de gérer les erreur de type "fatal error" dans un projet ZendFramework, plus particulièrement avec l'errorHandler enregistré en tant que plugin de l'application par défaut (en espérant être compréhensible ici)?

Ca fait 2 mois que je m'interesse beaucoup à ce framework et recemment j'ai voulu tester s'il était possible de gérer les erreurs fatales.

J'y arrive d'une certaine manière en utilisant un

Code:

[lang=php]set_error_handler ( array ($this, 'myErrorHandler' ), E_ALL );

et un

Code:

[lang=php]        
register_shutdown_function ( array ($this, 'fatalErrorShutdownHandler' ) );

Je sais bien qu'une erreur de type "fatal" stope l'execution du script en cours, et n'est pas "try / catchable" si je puis dire, c'est pour cela que j'utilise le register_shutdown_function

mais j'aimerais savoir si certains d'entre vous ont réussi à "réinjecter l'erreur dans l'error handler enregistré pour l'application" ou si c'est tout bonnement impossible.

Je m'explique plus clairement :

Grâce au "set_error_handler" et "register_shutdown_function" j'arrive a executer un script lorsque l'erreur fatale se produit.

J'ai testé plusieurs choses dans ce script du genre afficher via un petit var_dump l'instance du Zend_Controller_Front pour vérifier qu'il soit toujours instancié, et c'est le cas. Je suppose donc qu'il est peut-être éventuellement possible d'utiliser l'error handler de l'application déjà existante?

Seul soucis en quasi 3 jours je n'ai pas trouvé comment faire x)

j'imagine que je peux être un peu confus dans mes explications, mais après presque 3 jours de bataille, la j'avoue, j'ai beau être matinal, j'ai mal smile

Si quelqu'un a un indice je suis preneur (ou veut des précisions, se sera ac grand plaisir smile  )

Dernière modification par Gorgoth (12-05-2014 17:34:51)

Hors ligne

 

#2 27-02-2010 18:21:53

NewSky
Membre
Date d'inscription: 17-12-2007
Messages: 79

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Salut,

as-tu regardé du coté de la classe ErrorException.

Théoriquement, le plugin ErrorHandler est censé être lancé à partir du moment ou une Exception est lancé durant la boucle de "dispatchage". Si tu arrives à capturer ton erreur fatal et à la traduire en Exception, ça devrait probablement fonctionner. Maintenant, j'imagine que ça va dépendre de l'endroit où l'erreur intervient et vraiment de sa gravité : si le système ne peut pas s'initialiser correctement, il ne pourra probablement pas rendre ton erreur comme tu le veux... Enfin, je crois.

Hors ligne

 

#3 27-02-2010 18:34:41

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Salut NewSky!

Merci de ta réponse, malheureusement, je me retrouve avec une 2ème erreur fatale en tentant de "convertir" l'erreur fatale en ErrorException :

Code:

Fatal error: Exception thrown without a stack frame in Unknown on line 0

je sèche x)

Dernière modification par Gorgoth (27-02-2010 18:35:09)

Hors ligne

 

#4 28-02-2010 20:04:03

NewSky
Membre
Date d'inscription: 17-12-2007
Messages: 79

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Salut,

j'avoue que c'est une erreur que je ne connais pas ! Une petite recherche sur Google m'a amené sur une ce site.

Peut-être que ce que tu veux faire risque d'être un peu compliqué ;-)...

Dernière modification par NewSky (28-02-2010 20:04:54)

Hors ligne

 

#5 28-02-2010 20:18:59

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

mais oui que je suis c**!!

je dois rentrer dans une boucle infinie!!! c'est pour ca! mais quel gl**d!

faut que je regarde si je peux déregistrer l'error handler lors de l'execution pr permettre d'encapsuler l'erreur fatale dans mon exception métier et la filer au errorHandler zend.

je vais tester ça merci de l'info NewSky!! Je reviens poster dés que j'ai testé

Hors ligne

 

#6 01-03-2010 11:25:03

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

En fait le souci vient du fait que la fonction enregistrée à exécuter lors du shutdown qui s'effectue suite à une erreur fatale, s'execute en boucle si je lève la moindre exception, ce qui parait logique.

Je n'ai pas trouvé depuis hier soir comment bypasser ce souci, je tiens au courant de l'avancement.

PS : le "set_error_handler" me sert à rien ou c'est moi? Car j'ai fait des tests sans ce dernier et apparament, aucun impact...

Hors ligne

 

#7 01-03-2010 12:12:05

NewSky
Membre
Date d'inscription: 17-12-2007
Messages: 79

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Salut,

je sais pas si tu as regardé un peu directement dans le framework comment Zend gère ce genre de problèmatique :
si tu regardes Zend_Config_Xml::__construct(), il bloque les erreurs qui peuvent venir de SimpleXML.

je sais pas si ça peut t'aider dans ta recherche.

Hors ligne

 

#8 01-03-2010 12:41:49

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Salut et merci du tuyau NewSky!

Tu es sûr que les erreurs de type fatal sont gérées dans le Zend_Config_Xml et le Zend_Config dont il hérite?

Il font en effet un set_error_handler d'une méthode héritée du Zend_Config dans le Zend_Config_Xml (_loadFileErrorHandler), puis un restore_error_handler qui doit (je présume) permettre d'enlever l'error handler pour permettre une levée d'exception normale par la suite, mais je ne suis pas sûr que les erreurs dont l'errno soit à 1 (typiquement, erreur fatale) soit récupérée.

J'ai fait 2 3 tests avec uniquement l'utilisation du "set_error_handler" mais les erreurs fatales passent encore une fois au travers sad

Hors ligne

 

#9 02-03-2010 13:04:07

NewSky
Membre
Date d'inscription: 17-12-2007
Messages: 79

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

En réalité, je n'ai pas trop testé le comportement de Zend_Config et les erreurs.

Voici le petit test que j'ai fait :

Code:

<?php
$xml = 'babobibobu';
simplexml_load_string($xml);

et le résultat :

Code:

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Start tag expected, '<' not found in C:\Program Files (x86)\Zend\Apache2\htdocs\zend\public_html\Config\index.php on line 7

Warning: simplexml_load_string() [function.simplexml-load-string]: babobibobu in C:\Program Files (x86)\Zend\Apache2\htdocs\zend\public_html\Config\index.php on line 7

Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in C:\Program Files (x86)\Zend\Apache2\htdocs\zend\public_html\Config\index.php on line 7

Et maintenant :

Code:

<?php
require('Zend/Loader/Autoloader.php');
$autoloader = Zend_Loader_Autoloader::getInstance();

$xml = 'babobibobu';
$config = new Zend_Config_Xml( $xml );

et le résultat :

Code:

Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'simplexml_load_file() [<a href='function.simplexml-load-file'>function.simplexml-load-file</a>]: I/O warning : failed to load external entity &quot;babobibobu&quot;' in C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Config\Xml.php:98 Stack trace: #0 C:\Program Files (x86)\Zend\Apache2\htdocs\zend\public_html\Config\index.php(6): Zend_Config_Xml->__construct('babobibobu') #1 {main} thrown in C:\Program Files (x86)\Zend\ZendServer\share\ZendFramework\library\Zend\Config\Xml.php  on line 98

Donc Zend_Config gère bien n'importe quelle type d'erreur. Il va même jusqu'à changer le type d'erreur!

Dernière modification par NewSky (02-03-2010 13:04:40)

Hors ligne

 

#10 02-03-2010 15:12:08

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Merci de ta réponse sur Zend_Config NewSky, ils gerent en effet toutes les erreurs type 'fichier non existant' etc et font remonter les erreurs sous forme d'exception Zend.

Mais de mon coté, j'ai trouvé ma solution big_smile

Bon je préviens c'est un peu alambiqué, voir beaucoup. De plus c'est en cours de dev et ça va surement être grandement amélioré dans les jours qui viennent. De plus je commente tjs mon code en anglais (bon y'a pas bcp de commentaires dans ce que je poste), j'espère qu'il n'y a pas d'anglophobes.

Je précise que si je souhaite gérer les erreur de type fatal (E_ERROR) et dites "de compilation" (E_COMPILE_ERROR) c'est principalement dans un souci de lisibilité des erreurs, pour le dev car c'est un gros projet et que plusieurs personnes developpent en même temps.

Je travaille dans un controlleur de test nommé "testController", dans le répertoire "controllers" de mon application (pas eu trop le temps de m'interesser aux tests de zendframework, envisagé pour le futur), et utilise l'action "test" de ce controlleur (méthode public testAction()).

Code:

    public function testAction() {
        
        register_shutdown_function ( array ($this, 'myShutdownErrorHandler' ) );
        
        $this->view->title = "Test page ";
        
        $this->view->date = date ( 'd/m/Y' );
        $this->view->hour = date ( 'H:i:s' );
        $this->view->by = "Me";
        
        
        $bob = new BobMorane();

    }

évidemment, dans le code précédent, ma classe BobMorane n'existe pas. L'appel va donc générer une erreur de type E_ERROR.

C'est là que le register_shutdown_function entre en jeu. Comme on peut le voir dans le code précédent, il est enregistré en premier, et fait partie de l'objet TestController, c'est pourquoi on retrouve un array($this, 'myShutdownErrorHandler' ) lors de l'appel : pour lui spécifier qu'il faut utiliser la méthode myShutdownErrorHandler de l'objet courant. Son code :

Code:

    public function myShutdownErrorHandler() {
        
        $last_error = error_get_last ();
        
        if ($last_error ['type'] === E_ERROR || $last_error ['type'] === E_COMPILE_ERROR) {
            $this->errorProcessing ($last_error['message']);
        }
    
    }

On vérifie qu'une erreur n'a pas déja eu lieu grâce au error_get_last, et si c'est le cas, on va executer la méthode errorProcessing du controlleur de test. On remarque que l'on réalise cela dans le cas d'une erreur fatale (d'execution ou de compilation) comme expliqué précedemment, grâce au test de $last_error['type'].

La méthode errorProcessing quand à elle réalise le code suivant :

Code:

    public function errorProcessing($errMess) {
        
        $last_error = error_get_last ();
        
        $error = new Personnalized_Error_EngineErrors();
        
        //This type is used to tell the errorhandler the type of the error. Set to something different
        // from Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER 
        //Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION
        //Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER to be
        //used properly in the error controller and enter its switch-case default process.
        $error->type = "someerrortype"; 
        
        $error->exception = new ErrorException ( $errMess, 9999, 6666, $last_error ['file'], $last_error ['line'] );
        $error->request = new Zend_Controller_Request_Http();
        
        $error->request->setParams(array(
        'controller' => 'test',
        'action' => 'test',
        'module' => 'default'
        ));
        
        
        $this->getRequest ()->setParam ( 'error_handler', $error );
        
        $this->getRequest ()->setParam('controller','error');
        $this->getRequest ()->setParam ( 'action', 'error' );
        $this->getRequest ()->setControllerName ( 'error' );
        $this->getRequest ()->setActionName ( 'error' );
        
        //Tells the front controller the request hasn't been dispatched yet
        $this->getRequest()->setDispatched(false);
        
        Zend_Controller_Front::getInstance()->dispatch($this->getRequest(),$this->getResponse());
        
    }

On remarque que j'utilise un objet de type Personnalized_Error_EngineErrors qui ne me sert qu'a me faciliter le passage des erreurs au controlleur qui gère ces dernières.

Ce qu'il faut remarquer c'est qu'a un moment donné j'effectue un

Code:

        $this->getRequest ()->setParam ( 'error_handler', $error );

pour remplir le parametre "error_handler" de la requete avec mon objet Personnalized_Error_EngineErrors.

Derriere je relance le front controlleur.

J'ai un plugin qui me permet de gérer ce genre de cas particulier : il est enregistré dans mon bootstrap de la manière suivante :

Code:

    public function run() {
        
        $errorHandler = new Zend_Controller_Plugin_ErrorHandler();
        
        $front = Zend_Controller_Front::getInstance();
        $default = $front->getDefaultModule ();
        if (null === $front->getControllerDirectory ( $default )) {
            throw new Zend_Application_Bootstrap_Exception ( 'No default controller directory registered with front controller' );
        }
        
        //ADDED the presonalized plugin registration.
        $front->registerPlugin(new Personalized_Plugin_Plug());
        
        $front->setParam ( 'bootstrap', $this );
        $front->dispatch ();
    }

Et qui réalise seulement la manip suivante lors du routeShutdown :

Code:

    public function routeShutdown(Zend_Controller_Request_Abstract $request) {
        
        $errorHandler = $request->getParam ( 'error_handler' );
        
        if (! isset ( $errorHandler ) || is_string ( $errorHandler )) {
            //Some logic here that U don't need to see ;)
        } else {
            $request->setControllerName ( 'error' );
            $request->setActionName ( 'error' );
        }
    }

pour modifier la route et envoyer l'execution sur le controlleur d'erreurs.

Le controlleur d'erreurs qui est appelé est le suivant :

Code:

    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;
            
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER :
                
                // 404 error -- controller or action not found
                $this->getResponse ()->setHttpResponseCode ( 404 );
                $this->view->message = 'Page not found';
                break;
            
            default :
                
                // application error 
                $this->getResponse ()->setHttpResponseCode ( 500 );
                $this->view->message = 'Application error';
                break;
        }
        
        $this->view->exception = $errors->exception;
        $this->view->request = $errors->request;
            
    }

il sera reconnu par ceux qui ont lu les différents tutos présents sur le net x). Il injecte directement dans la vue les variables "message","exception" et "request" utilisées par la vue pour afficher le contenu des erreurs.



Comme je l'ai dit au tout premier post, je débute sous Zend donc je suis bien conscient que j'ai surement fait des erreurs dans ma façon d'appréhender le shmilblik, donc si tu remarques que j'ai fait une erreur énormissime quelque part NewSky je t'en prie big_smile ou qui que ce soit d'autre d'ailleurs.

Et comme je l'ai dit dans ce post, ça va évoluer dans les jours qui viennent et sûrement pas qu'un peu, surtout si j'ai fait des erreurs grosses comme moi x).

J'espère que je suis clair dans l'explication que je fournis ici, si je dois modifier des choses je posterai derrière que ça puisse servir à d'autres personnes.


EDIT : modification dans la méthode errorProcessing : j'avais recopié la mauvaise fin de la méthode qui fonctionnait aussi mais qui relançait tout le front controller, hors là on lui indique juste que la requete n'a pas encore été dispatchée et on relance le dispatching avec une requete modifiée juste auparavant.

Dernière modification par Gorgoth (02-03-2010 18:18:04)

Hors ligne

 

#11 03-03-2010 10:39:34

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Alors je me suis rendu compte que :

-le setDispatched(false) ne servait à rien et je ne comprends pas pourquoi

-lorsque je réexecute le dispatch du Zend_Controller_Front, la request que je lui file est bien conservée, mais le controller et l'action sont remis a "index"... C'est pourquoi dans mon plugin exposé dans le post précédent, lors du routeShutdown je fais un

Code:

        if (! isset ( $errorHandler ) || is_string ( $errorHandler ))

Je débuggue ça et me rend compte que lors du second dispatch (que je génère lors de la levée d'erreur), la requête est préservée car mon paramètre error_handler subsiste, mais le controller et l'action mis précédemment a "error" et "error" sont remis a "index" et "index"!! (saperlipopette!)

Si quelqu'un a un indice la dessus, je suis preneur smile

Hors ligne

 

#12 03-03-2010 12:13:08

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

pour la réexecution du dispatch qui réécrit le controlleur et l'action, j'ai compris pourquoi : lorsque je fais appel au dispatch du frontController, ce dernier réalise tout le routage (routeStartup des plugins, route du routeur et routeShutdown des plugins) avant de réaliser le dispatchLoopStartup des plugins, puis le predispatch des plugins pour apres lancer un dispatch mais du dispatcheur cette fois ci.

j'ai donc tenté de remplacer le

Code:

        Zend_Controller_Front::getInstance()->dispatch($this->getRequest(),$this->getResponse());

par

Code:

        Zend_Controller_Front::getInstance()->getDispatcher()->dispatch($this->getRequest(),$this->getResponse());

mais là, il ne se passe plus rien..... big_smile je sèche donc (comme un slip au soleil, ou comme les élèves quand il fait beau temps)

Hors ligne

 

#13 04-03-2010 12:30:15

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Bon je reviens ici poster une "dernière version" de ce que j'ai fait

Puisse-t-elle être utile à d'autres personnes big_smile.

J'ai tout viré de mon controleur de tests et ai modifié mon index.php qui lance l'application. J'y ai calé le register_shutdown_function ainsi que les fonctions qui servent à réaliser le traitement. J'ai d'abord rajouté cette première ligne :

Code:

register_shutdown_function ( 'myShutdownErrorHandler' );

au tout début du script, et j'ai ensuite rajouté les 2 fonctions myShutdownErrorHandler et errorProcessing que voici :

Code:

/**
 * Method executed at the end of this script to handle possible errors.
 */
function myShutdownErrorHandler() {
    
    //Here we get the last error that happened
    $last_error = error_get_last ();
    
    //If errortype is "fatal" or "compile error" we do the errorProcessing function
    if (E_ERROR === $last_error ['type']  || E_COMPILE_ERROR === $last_error ['type'] ) {
        errorProcessing ( $last_error ['message'],$last_error ['file'], $last_error ['line'] );
    }

}

Code:

/**
 * Method used to execute the error handling itself.
 * 
 * @param string $errMess the error message
 * @param string $errFile the file that generated the error
 * @param int    $errline the line where the error was raised
 */
function errorProcessing($errMess, $errFile, $errLine) {
    
    //First cleans the output buffering 
    ob_clean();
    
    //Creates a Engine_Error_EngineErrors
    $error = new Engine_Error_EngineErrors ();
    
    //Gets the front controller
    $front = Zend_Controller_Front::getInstance ();
    
    //Gets the request from the front controller
    $request = $front->getRequest ();
    
    //Sets the type to the EngineError object
    $error->type = "someerrortype";
    //Sets an errorException in the EngineError object
    $error->exception = new ErrorException ( $errMess, 9999, 6666,$errFile , $errLine);
    //Sets a Zend http request object in the EngineError, and sets its params to the same
    //as the Front request params.
    $error->request = new Zend_Controller_Request_Http ();
    $error->request->setParams ( $request->getParams () );
    
    //Set the EngineError in the request as a parameter named "error_handler".
    //It's the name used by the errorController to process errorHandling.
    $request->setParam ( 'error_handler', $error );
    $request->setDispatched ( false );
    
    //Used "for sport" :)
    $response = $front->getResponse ();
    
    //Here we simulate a /error/error uri to send the request on the error
    //controller with the error action
    $request->setPathInfo('/error/error');
    
    //We dispatch the request
    $front->dispatch ( $request, $response );
    
}

je réalise un ob_clean(); au début de l'errorProcessing pour être sûr que rien ne vienne perturber l'affichage de mon message d'erreur.

Le controleur d'erreur est celui "par défaut" comme très souvent décrit et montré dans les divers exemples que l'on trouve sur le net :

Code:

    
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;
            
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_OTHER :
                
                // 404 error -- controller or action not found
                $this->getResponse ()->setHttpResponseCode ( 404 );
                $this->view->message = 'Page not found';
                break;
            
            default :
                
                // application error 
                $this->getResponse ()->setHttpResponseCode ( 500 );
                $this->view->message = 'Application error';
                break;
        }
        
        $this->view->exception = $errors->exception;
        $this->view->request = $errors->request;
        
    }

EDIT : je pense modifier l'errorController et surtout l'errorAction du controlleur, car l'errorStack ainsi généré n'est pas bien "causant" et pas assez précis. Jvais donc voir à modifier ça.

Je précise que lorsque l'on passe l'application en production on n'affiche qu'une "banale" page d'erreur sans stackTrace, et que cela est géré dans la vue associée au controlleur d'erreur comme suit :

Code:

<?php if ('development' == APPLICATION_ENV): ?>

<h3>Exception information:</h3>
<p><b>Message:</b> <?php echo $this->exception->getMessage() ?>
</p>
<h3>Stack trace:</h3>
<pre><?php echo $this->exception->getTraceAsString() ?></pre>

<h3>Request Parameters:</h3>
<pre><?php echo var_export($this->request->getParams(), true)?>
</pre>
<?php endif ?>

voili voilou big_smile

Dernière modification par Gorgoth (04-03-2010 12:33:42)

Hors ligne

 

#14 14-04-2010 04:03:56

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Merci Gorboth ! Je suis en train de chercher à réaliser un peu le même effet que toi mais pour enregistrer les erreurs dans une base de donnés lorsque le site est en production.

J'ai une question à propos de ton code: D'où est-ce que tu prends ceci : Engine_Error_EngineErrors() ?
Tu as créé une autre classe ?

Hors ligne

 

#15 14-04-2010 09:09:31

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

De rien Probitaille smile content que ça puisse servir!

Et oui le 'Engine_Error_EngineErrors() est une classe perso que j'utilise pour mapper via un objet les propriétés utilisées par la vue d'erreur dans un objet métier (ça me simplifie la vie plus tard dans d'autre code ailleurs).

En gros, elle ressemble à ceci :

Code:

class Engine_Error_EngineErrors{
    
    /**
     * @var string
     */
    public $type;
    
    /**
     * @var ErrorException
     */
    public $exception;
    
    /**
     * @var Zend_Controller_Request_Http
     */
    public $request;
    
}

Elle est nommée avec la convention des "namespaces" Zend qui est propre à mon projet quant à elle.

Hors ligne

 

#16 16-04-2010 17:10:57

probitaille
Membre
Lieu: Montréal
Date d'inscription: 20-04-2009
Messages: 336
Site web

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Resalut Gorgoth !

Je suis confronté à un problème que tu as surement vu. Lorsque j'ai une erreur et que j'essaie de renvoyé à mon controller d'erreur...il rentre en boucle infinis puisqu'en entrant dans le controller d'erreur...il détecte toujours le warning.

Dans ce cas, ce système fonctionne seulement lorsque les erreurs sont dans des controlleurs et des actions spécifique et non dans un code qui sera appeler à chaque requête par exemple...le layout, utilisé pour le controlleur d'erreur.

Est-ce que tu as réussis à contourner ce genre de problème ? Merci

Hors ligne

 

#17 21-04-2010 16:12:50

Gorgoth
Membre
Date d'inscription: 25-02-2010
Messages: 20

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

Hmmmm je présume que pour ce genre de souci, tu te retrouves avec une exception à corps vide non? (ce qui veut dire que "ça boucle" (pas les cheveux de mamie hein, l'exécution!))

Si l'erreur est dans le layout utilisé par le controlleur d'erreur, perso je n'ai pas eu ce genre de probleme... En effet ça fonctionne seulement si ton controlleur d'erreur et le layout qui lui est associé ne sont pas buggués. Et j'ai pas trop planché le sujet du "comment faire si ces derniers ont eux aussi un problème" partant du principe qu'ils devaient être très robustes puisque destinés à gérer les erreurs.

Hors ligne

 

#18 19-07-2010 11:32:34

toufik
Nouveau membre
Date d'inscription: 13-07-2010
Messages: 4

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

bonjour à tous,

j'utilise le zend framework pour me connecter à google apps!
c à dire j'utilise un compte que j'ai chez google pour m'identifier.
cependant qand je rentre un faux mot de passe (par exp) le zend me génere  Fatal error: Uncaught exception 'Zend_Gdata_App_AuthException'
je veux eviter cette erreur pour afficher une autre page en disant que le mot de passe est erroné!
est ce que vs avez une idée comment dois je faire??

un tres grand merci

Hors ligne

 

#19 19-07-2010 11:34:52

toufik
Nouveau membre
Date d'inscription: 13-07-2010
Messages: 4

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

comment capturer mon erreur fatal et la traduire en exception??
merci

Hors ligne

 

#20 19-07-2010 11:38:09

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

C'est justement une fatal error parce que tu ne l'as pas attrapé :

Code:

try {
    // l'auth avec le mauvais mot de passe
} catch (Zend_Gdata_App_AuthException $e) {
    // Ce que tu veux
}

Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#21 19-07-2010 12:21:08

toufik
Nouveau membre
Date d'inscription: 13-07-2010
Messages: 4

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

justement ça ne marche pas!! ça génere toujours la meme erreur

Hors ligne

 

#22 19-07-2010 15:02:00

toufik
Nouveau membre
Date d'inscription: 13-07-2010
Messages: 4

Re: [Résolu] Gérer les erreurs de type "Fatal" dans une appli ZF

comment capturer mon erreur fatal et la traduire en exception??
merci d'avance

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