Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-07-2009 11:09:52

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Gestion des erreurs : Afficher la requête qui ne marche pas.

Bonjour,

j'ai utilisé les tutos de dator pour commencer mon application sous ZF avec le code suivant pour la gestion des erreurs :

Code:

class ErrorController extends Zend_Controller_Action
{

    public function errorAction()
    {
        $errors = $this->_getParam('error_handler');

        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:

                // 404 error -- controller or action not found
                $this->getResponse()->setHttpResponseCode(404);
                $this->view->message = 'Page not found';
                break;
            default:
                // application error
                $this->getResponse()->setHttpResponseCode(500);
                $this->view->message = 'Application error';
                break;
        }

        $this->view->exception = $errors->exception;
        $this->view->request   = $errors->request;
    }

}

Code:

<h1>An error occurred</h1>
<h2><?= $this->message ?></h2>

<? if ('development' == APPLICATION_ENV): ?>;
<h3>Exception information:</h3>

<strong>Message:</strong> <?= $this->exception->getMessage() ?>
<h3>Stack trace:</h3>

<pre><?= $this->exception->getTraceAsString() ?>
  </pre>
<h3>Request Parameters:</h3>

<pre><? var_dump($this->request->getParams()) ?>
  </pre>
  <? endif ?>

Je trouve qu'il manque juste une info.
Lorsque l'on fait une erreur de requête sur la base de donnée (colonne inexistante, mauvaise gestion des jointures etc), il n'est pas possible de voir la requête executée par le ZF.

Est-il possible de récupérer cette requête et l'afficher de la même manière que je le fais déjà pour les exceptions  ou les paramètres ?

Merci d'avance.

Hors ligne

 

#2 22-07-2009 15:03:39

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Gestion des erreurs : Afficher la requête qui ne marche pas.

dans ton modèle tu encadre les appel à la persistance par des try catch
dans le catch tu as accès à tous les objets qui servent à la persistance du ac donc les infos sur les requêtes
(il faut faire un ->_tostring() sur l'objet select)
tu crée une exception contenant les éléments que tu veux voir remonter et tu la lève

je conseil de créer des classe d'exception pour chaque partie du modèle
cela permet de les traper dans n'importe quel point de l'appli

Code:

//... classe Model_User

function save()
{
     $row = $this->getRow(); //récupère la ligne correspondante
     try {
       $row->save();
    } catch (Exception $e) {
       thorw new Model_User_Exception("persistence error:" , $row, $e);
   }

Hors ligne

 

#3 22-07-2009 15:18:02

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: Gestion des erreurs : Afficher la requête qui ne marche pas.

Oki. C'est à moi de mettre en place les rémontées d'exception.
J'espèrais que ce soit déjà disponible depuis le error_handler. Dommage..

Merci pour les infos.

@sekaijin : Ou se trouve les informations sur la requêtes ? dans le $e ?
Plus généralement, est-ce que tu aurais de la doc sur la création de classe d'exception ? La doc Zend est assez légère je trouve...

Hors ligne

 

#4 22-07-2009 16:30:59

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: Gestion des erreurs : Afficher la requête qui ne marche pas.

Heu.. Est-ce que tu as un exemple de code de ce que pourrait être Model_User_Exception ?

Dernière modification par slaughter (22-07-2009 16:32:33)

Hors ligne

 

#5 22-07-2009 16:42:36

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Gestion des erreurs : Afficher la requête qui ne marche pas.

pour les requête select c'est dans l'objet select lui même
que ce soit sur un select simple ($db->select) ou un objet table_select

pour le reste je suis malheureusement encore trop sur une vielle version qui ne permet pas de conaitre la requête que sera exécutée

il faut donc la reconstruire.

A+JYT

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