Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour , j'ai un probleme :
Je voudrai comme pas mal de monde apparement gerer l'affichage de mes vues lors d'une erreur.
dans mon bootstrap j'ai ceci (d'apres l'atelier de julien pauli) :
$errorHandler = new Zend_Controller_Plugin_ErrorHandler(); $errorHandler->setErrorHandlerModule('default') ->setErrorHandlerController('error') ->setErrorHandlerAction('error'); $frontController = Zend_Controller_Front::getInstance(); $frontController->registerPlugin($errorHandler); // run! try { $frontController->dispatch(); // dispatche ! } catch (Exception $exception) { // attrape toute exception exit($exception->getMessage()); }
ensuite mon errorControlleur comme ceci :
<?php require_once 'Zend/Controller/Action.php'; class ErrorController extends Zend_Controller_Action { private $_exception; private static $errorMessage; private static $httpCode; public function preDispatch() { $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() { $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); } } }
Mon probleme est que je n'arrive pas gerer ma vue. Je ne sais meme pas si c'est la vue error qui est appelé...
quand j'ecrit un controlleur bidon dans l url j ai ceci :
Invalid controller specified (gfb)
Mon but serai d'habiller la page
Hors ligne
Regarde bien le code
public function preDispatch() { $this->_helper->viewRenderer->setNoRender(true); // ne rend aucune vue automatiquement
Il faut enlever cette ligne si tu veut avoir le rendu auto de ton fichier phtml
Hors ligne
ca ne marche pas il me met toujours Invalid controller specified (gfb)
voici mon error.phtml
<?php echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Error Page</title> </head> <body> <h1><?= $this->title ?></h1> <? if ($this->message): ?> <p>The following error occurred:</p> <?=$this->message ?> <? endif; ?> <h3>ca marche pas !!!!</h3> </body> </html>
reedit :
j ai fais ca dans mon bootstrap et ca marche un peu mieux :
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(false);
mais il ne m affiche pas l'erreur en question
Dernière modification par larenzu (28-07-2008 10:00:45)
Hors ligne