Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-03-2009 18:01:55

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Question relative à la Gestion d'erreur et au controlleur frontal.

Hello,

je rencontre un petit problème concernant mon projet.

Dans mon index.php j'initialise le Zend_Controller_Front:

Code:

...
$front = Zend_Controller_Front::getInstance();
$front->throwExceptions($config->debug->throwExeption); 
$front->setControllerDirectory('../application/controllers'); 
$front->setBaseUrl($config->www->baseurl);
$front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(array(  
    'controller' => 'error',
    'action'     => 'display'
)));
...

Avec la gestion des erreurs via un controlleur.

Jusque la tout va bien.

$config correspond à un fichier .ini de config.
En local la variable $config->debug->throwExeption est à true et sur le serveur de production il est à false.

Cependant j'ai remarqué sur le serveur de prod qu'a false, le script continue l'exécution du code et ne s'arrête pas! vous me suivez ? (je l'ai remarqué à grace à une gestion du cache)

Le problème c'est que si je le met à true sur le serveur ben l'envoi d'une page 404 n'est plus possible vu qu'on affiche l'erreur.

Donc ma question est:
est ce possible de stopper l'exécution du script lorsque en lançant une exception, tout en appelant le controlleur d'erreur qui lui va afficher une 404?

D'avance merci

Hors ligne

 

#2 20-03-2009 18:34:40

ouardisoft
Nouveau membre
Date d'inscription: 20-03-2009
Messages: 4

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

si vous avez ce type de message?

Code:

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified [color=#FF0000](error)[/color]' ...

il faut lire ceci

cliquez ici

Hors ligne

 

#3 25-03-2009 13:18:21

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

non les messages d'erreurs sont bien intercepté.
Le pb vient du fait que si je met mon param throwExeption à false le script continue de s'exécuter pour afficher une page 404.

J'aurais souhaité que dès lors que exception est lancé il peu soit s'afficher (jusque la pas de problème) ou afficher une page 404 sans exécuter la suite du script. Et c'est bien la tout mon pb.
N'y a t il pas une facon de stopper l'exécution du script, en affichant une page 404 tout en arrêtant l'exécution de la suite du script ?

Hors ligne

 

#4 26-03-2009 19:38:29

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

A partir du moment où ton script faire un "throw" alors ton script EST interrompu. C'est pas lié à Zend mais à PHP5.

L'exception remonte alors la pile des appels jusqu'à ce qu'elle soit interceptée (try {} catch() {}) et en dernier recours elle l'est par le contrôleur qui redirige la réponse vers le contrôleur d'erreur (ErrorController) qui lui affiche l'erreur de manière "jolie".

throwExceptions(true) veut dire que ton contrôleur ErrorController ne sera pas appelé mais l'erreur affichée à l'écran selon ta configuration PHP.

throwExceptions(false) veut dire que ton contrôleur ErrorController sera appelé et l'erreur affichée selon ce que fait ton action.

A mon avis tu ne dois pas gérer ton erreur correctement ou alors faire un catch sans ensuite faire un die() ou un exit() ou un autre "throw".


Quelques tutoriaux Zend Framework !

Hors ligne

 

#5 27-03-2009 08:39:30

Nikko
Membre
Lieu: Rueil (Haut-de-Seine)
Date d'inscription: 19-12-2008
Messages: 95

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

Je ne sais pas si c'est une erreur de recopie sur le forum, mais il y a une erreur juste ici :

Code:

$front->throwExceptions($config->debug->throwExCeption);

=> le "C" de Exception ==> fin de ligne


Nikko

Etudiant en école d'ingénieur à l'INSIA

Hors ligne

 

#6 29-03-2009 03:44:15

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

S'il l'a écrit faux dans son fichier de configuration, vaut mieux qu'il l'écrive faux partout... ou alors juste partout. tongue


Quelques tutoriaux Zend Framework !

Hors ligne

 

#7 30-03-2009 14:06:00

bucheron
Membre
Date d'inscription: 30-05-2008
Messages: 138

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

Nikko a écrit:

Je ne sais pas si c'est une erreur de recopie sur le forum, mais il y a une erreur juste ici :

Code:

$front->throwExceptions($config->debug->throwExCeption);

=> le "C" de Exception ==> fin de ligne

oui petite erreur de recopie.

keilnoth a écrit:

A partir du moment où ton script faire un "throw" alors ton script EST interrompu. C'est pas lié à Zend mais à PHP5.

L'exception remonte alors la pile des appels jusqu'à ce qu'elle soit interceptée (try {} catch() {}) et en dernier recours elle l'est par le contrôleur qui redirige la réponse vers le contrôleur d'erreur (ErrorController) qui lui affiche l'erreur de manière "jolie".

throwExceptions(true) veut dire que ton contrôleur ErrorController ne sera pas appelé mais l'erreur affichée à l'écran selon ta configuration PHP.

throwExceptions(false) veut dire que ton contrôleur ErrorController sera appelé et l'erreur affichée selon ce que fait ton action.

A mon avis tu ne dois pas gérer ton erreur correctement ou alors faire un catch sans ensuite faire un die() ou un exit() ou un autre "throw".

ok je crois savoir d'ou le problème peut venir.
En fait il y a une exception qui est levée sous certaines conditions au niveau d'un plugin perso.
Est il possible que malgré le lancement de l'exception dans ce plugin, le script continue à tourner du fait d'un try/catch intern géré au niveau de la fonction registerPlugin ? et par conséquent le pb viendrait que l'exception est lancée au niveau du plugin.

voici mon code:

Code:

$front->registerPlugin(new My_NewPlugin() );

Hors ligne

 

#8 08-04-2009 14:18:12

aikido
Membre
Date d'inscription: 02-12-2008
Messages: 17

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

Bonjour à tous,

Je suis confronté au même souci:
J'ai des exceptions qui peuvent se déclencher dans mes plugins.

Or le errorHandler (Plugin) de Zend ne fonctionne qu'au niveau d'un postDispatch et donc apres le rendu de la première action.

Le souci, c'est qu'une exceptions levée dans un de mes plugins est du type critique.
Pour moi, les plugins initialises les bases de mon projet si je peux dire et donc, lors d'une exception je dois tout arrêter avant la première action. Il n'est pas donc pas possible de se servir du plugin errorHandler.

Comment gerez vous les exceptions dans les plugins?

Par exemple, le plugin initializer->initDb() initialise ma connexion à ma base de données.
Si par exemple, la connexion échoue, alors une exception Zend_Db_Exception est levée.
A ce moment là que faites vous? Je rappel que le errorHandler est actif qu'après la première action :-(

Hors ligne

 

#9 08-04-2009 15:45:58

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

C'est pas compliqué

Code:

try {
  $front->dispatch();
}
catch (Excpetion $e) {
  echo ....
}

----
Gruiiik !

Hors ligne

 

#10 08-04-2009 15:49:56

aikido
Membre
Date d'inscription: 02-12-2008
Messages: 17

Re: Question relative à la Gestion d'erreur et au controlleur frontal.

et non car l'exception est stockée dans l'object response...
Ton astuce dépend de Zend_Controller_Front::getInstance()->throwExceptions(XXXX);

Si XXXX est à "true" ok ca marche, s'il est à "false" comme dans la plupart des cas, cela ne marche plus :-(

Dernière modification par aikido (08-04-2009 16:21:45)

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