Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-07-2008 15:44:21

larenzu
Membre
Date d'inscription: 04-03-2008
Messages: 77

Gestion des erreurs

Bonjour , j'ai un probleme :

Je voudrai comme pas mal de monde apparement gerer l'affichage de mes vues lors d'une erreur.

dans mon bootstrap j'ai ceci (d'apres l'atelier de julien pauli) :

Code:

$errorHandler = new Zend_Controller_Plugin_ErrorHandler();
$errorHandler->setErrorHandlerModule('default')
->setErrorHandlerController('error')
->setErrorHandlerAction('error');
$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin($errorHandler);


// run!
try {
    $frontController->dispatch(); // dispatche !
} catch (Exception $exception) { // attrape toute exception
    exit($exception->getMessage());
}

ensuite mon errorControlleur comme ceci :

Code:

<?php



require_once 'Zend/Controller/Action.php';

class ErrorController extends Zend_Controller_Action
{
    private $_exception;
    private static $errorMessage;
    private static $httpCode;
    

    
    public function preDispatch()
    {
        $this->_helper->viewRenderer->setNoRender(true); // ne rend aucune vue automatiquement
        $this->_exception = $this->_getParam('error_handler');
        $this->_response->clearBody(); // on vide le contenu de la réponse
        $this->_response->append('error',null); // on ajoute un segment 'error' dans la réponse
        
        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;
                    case 'Autre_Exception' :
                        self::$httpCode = 500;
                        self::$errorMessage = 'Exemple avec une "autre exception"';
                    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');
        if (Zend_Registry::get('config')->debug == 'true') {
            $message = sprintf('<hr>DEBUG INFOS :<br /><strong>Exception de type <em>%s</em> <u>%s</u> envoyée dans %s à la ligne %d </strong> <p>Stack Trace : %s </p><hr>',
        get_class($this->_exception->exception),
        $this->_exception->exception->getMessage(),
        $this->_exception->exception->getFile(),
        $this->_exception->exception->getLine(),
        Zend_Debug::dump($this->_exception->exception,null,false)
                               );
            $this->getResponse()->append('debug',$message);
        }
    }
}

Mon probleme est que je n'arrive pas gerer ma vue. Je ne sais meme pas si c'est la vue error qui est appelé...

quand j'ecrit un controlleur bidon dans l url j ai ceci :

Invalid controller specified (gfb)

Mon but serai d'habiller la page sad

Hors ligne

 

#2 28-07-2008 09:40:28

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Gestion des erreurs

Regarde bien le code

Code:

 public function preDispatch()
    {
        $this->_helper->viewRenderer->setNoRender(true); // ne rend aucune vue automatiquement

Il faut enlever cette ligne si tu veut avoir le rendu auto de ton fichier phtml

Hors ligne

 

#3 28-07-2008 09:58:50

larenzu
Membre
Date d'inscription: 04-03-2008
Messages: 77

Re: Gestion des erreurs

ca ne marche pas il me met toujours  Invalid controller specified (gfb)

voici mon error.phtml

Code:

<?php
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Error Page</title>
</head>

<body>

    <h1><?= $this->title ?></h1>
    
    <? if ($this->message): ?>
        <p>The following error occurred:</p>
        <?=$this->message ?>
    <? endif; ?>
    <h3>ca marche pas !!!!</h3>
</body>

</html>

reedit :

j ai fais ca dans mon bootstrap et ca marche un peu mieux :
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(false);

mais il ne m affiche pas l'erreur en question

Dernière modification par larenzu (28-07-2008 10:00:45)

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