Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-04-2008 15:23:06

b.lio
Nouveau membre
Date d'inscription: 25-04-2008
Messages: 5

[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:

<?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:

<?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:

- 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

Dernière modification par b.lio (25-04-2008 15:26:30)

Hors ligne

 

#2 25-04-2008 15:49:46

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: [ErrorHandler][1.5.1]Affichage des exeptions non fonctionnel

Il manque un répertoire "default" pour le nom de ton module il semblerait non ?

Hors ligne

 

#3 25-04-2008 16:00:14

b.lio
Nouveau membre
Date d'inscription: 25-04-2008
Messages: 5

Re: [ErrorHandler][1.5.1]Affichage des exeptions non fonctionnel

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

 

#4 25-04-2008 16:29:38

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: [ErrorHandler][1.5.1]Affichage des exeptions non fonctionnel

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

 

#5 25-04-2008 17:11:05

b.lio
Nouveau membre
Date d'inscription: 25-04-2008
Messages: 5

Re: [ErrorHandler][1.5.1]Affichage des exeptions non fonctionnel

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

 

#6 07-05-2008 21:12:23

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: [ErrorHandler][1.5.1]Affichage des exeptions non fonctionnel

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 :

Code:

// 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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages