Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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