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
ErrorController.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()); }
Voici l'organisation de mes dossiers :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'); } }
J'obtiens comme message lors d'une page inconnue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9- applications/ --- config/ --- controllers/ * ErrorController.php --- models/ --- view/ * bootstrap.php - library - public
Merci d'avance pour l'aide que vous pourrez m'apporter,
Code : Sélectionner tout - Visualiser dans une fenêtre à part Invalid controller specified (pageinconnue)
Lionel B
Partager