IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

[ErrorHandler][1.5.1]Affichage des exeptions non fonctionnel


Sujet :

MVC PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [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 : 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());
    }
    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
    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 : 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
    J'obtiens comme message lors d'une page inconnue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invalid controller specified (pageinconnue)
    Merci d'avance pour l'aide que vous pourrez m'apporter,
    Lionel B

  2. #2
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Salut,

    Par défaut, le front contrôleur va chercher un contrôleur ErrorController puis invoquer sa fonction errorAction. Je dis bien, par défaut.
    Donc ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Gestion des exceptions
    $errorHandler = new Zend_Controller_Plugin_ErrorHandler();
    $errorHandler	->setErrorHandlerModule('default')
    				->setErrorHandlerController('error')
    				->setErrorHandlerAction('error');
    est inutile.

    Bon courage.

  3. #3
    Invité
    Invité(e)
    Par défaut
    ok merci de l'info.

    Sinon je viens de trouver d'ou vient le problème, il y a conflit avec mon script de gestion des permissions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/06/2015, 10h40
  2. Réponses: 1
    Dernier message: 03/01/2009, 19h30
  3. [MySQL] affichage des champs sql non vides
    Par rachou59650 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/04/2008, 15h59
  4. Problème d'affichage des caratères non UTF-8
    Par tit_pierre dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2006, 23h11
  5. [EasyPHP] [Serveur] [EasyPHP/Wamp5]Non affichage des erreurs
    Par leodi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 27/03/2006, 20h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo