Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'apprends à utiliser Zend Framework depuis à peine une semaine et me voilà confronté à mon 1er problème.
J'essaye de gérer l'affichage de mes exceptions, malheuresement ma class n'a pas l'aire d'etre prise en compte. Je cherche désespérement l'erreur mais rien n'y fait, je ne trouve pas (et ce n'ai pas faute d'avoir cherché dans la doc !).
Boostrap.php
<?php // Rapporte directement toutes les erreurs error_reporting(E_ALL); ini_set('display_startup_errors', 1); ini_set('display_errors', 1); date_default_timezone_set('Europe/Paris'); // Ajoute la library de ZF dans le include_path de PHP set_include_path('../library' . PATH_SEPARATOR . '../application/models' . PATH_SEPARATOR . get_include_path()); // Permet de charger automatiquement les classes sans avoir besoin de la charger auparavant require 'Zend/Loader.php'; Zend_Loader::registerAutoload(); // Charge la configuration SQL $config = new Zend_Config_Ini('../application/config/config.ini', 'general'); $db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray()); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('dbAdapter', $db); // Gestion des droits des membres $auth = Zend_Auth::getInstance(); $acl = new MyLib_Acl($auth); // Gestion des exceptions $errorHandler = new Zend_Controller_Plugin_ErrorHandler(); $errorHandler ->setErrorHandlerModule('default') ->setErrorHandlerController('error') ->setErrorHandlerAction('error'); // Gestion de l'instance MVC $frontController = Zend_Controller_Front::getInstance(); $frontController->setControllerDirectory('../application/controllers') ->registerPlugin(new MyLib_Plugin_Auth($auth, $acl)) ->registerPlugin($errorHandler) ->setParam('auth', $auth); try { $frontController->dispatch(); } catch (Exception $exception) { exit($exception->getMessage()); }
ErrorController.php
<?php class ErrorController extends Zend_Controller_Action { private $_exception; private static $errorMessage; private static $httpCode; public function preDispatch() { $this->_helper->viewRenderer->setNoRender(true); $this->_exception = $this->_getParam('error_handler'); $this->_response->clearBody(); $this->_response->append('error', null); 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'; 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'); } }
Voici l'organisation de mes dossiers :
- applications/ --- config/ --- controllers/ * ErrorController.php --- models/ --- view/ * bootstrap.php - library - public
J'obtiens comme message lors d'une page inconnue :
Invalid controller specified (pageinconnue)
Merci d'avance pour l'aide que vous pourrez m'apporter,
Lionel B
Dernière modification par b.lio (25-04-2008 15:26:30)
Hors ligne
Il manque un répertoire "default" pour le nom de ton module il semblerait non ?
Hors ligne
La clé default est utilisée pour indiquer les contrôleurs globaux (dont le nom ne comporte pas le module), donc logiquement le soucis ne vient pas de là
Dernière modification par b.lio (25-04-2008 16:01:22)
Hors ligne
Cette erreur survient (en général) lorsqu'une erreur dans le dispatching du contrôleur d'erreur arrive.
Un simple point d'arrêt sur le dispatching du FrontController te permettra de le mettre en évidence.
Hors ligne
Merci pour la réponse, par contre je ne comprends pas cette phrase :
"Un simple point d'arrêt sur le dispatching du FrontController te permettra de le mettre en évidence."
Désolé, je suis encore novice sous ZF et ne sais pas comment réaliser ce point d'arret (j'ai cru comprendre qu'il s'agit d'une fonctionnalité de certains IDE pour connaitre nos variables à une ligne donnée)
Merci d'avance,
Lionel B.
Hors ligne
apsy a écrit:
Il manque un répertoire "default" pour le nom de ton module il semblerait non ?
Je disais ça car dans ton code tu as mis :
// Gestion des exceptions $errorHandler = new Zend_Controller_Plugin_ErrorHandler(); $errorHandler ->setErrorHandlerModule('default') ->setErrorHandlerController('error') ->setErrorHandlerAction('error');
Tu as défini un nom de module pour ton controller d'erreur...
Hors ligne
Pages: 1