[ErrorHandler][1.5.1]Affichage des exeptions non fonctionnel
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
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <?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
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| <?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 :
Code:
1 2 3 4 5 6 7 8 9
| - applications/
--- config/
--- controllers/
* ErrorController.php
--- models/
--- view/
* bootstrap.php
- library
- public |
J'obtiens comme message lors d'une page inconnue :
Code:
Invalid controller specified (pageinconnue)
Merci d'avance pour l'aide que vous pourrez m'apporter,
Lionel B