Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 24-12-2008 15:11:55

b_20100
Membre
Date d'inscription: 23-09-2008
Messages: 23

Erreur personnalisée

Bonjour à tous,
Je continue mon apprentissage de ZF et je coince de nouveau.
J'ai implémenté la classe Error pour pouvoir utiliser le plugin errorhandler (j'ai suivi le tuto de Julien) et elle semble relativement bien fonctionner. La ou je voudrai l'améliorer, c'est créer des exceptions pour mes propres erreurs. Je vais prendre un exemple...
J'ai une classe acl, qui vérifie si l'utilisateur a le droit de voir la page ou non. Si il a pas le droit, il doit etre redirigé ou avoir un beau message. Dans les tutos, j'ai vu qu'on faisait ca en définissant un controlleur et une action ($request->setControllerName('Error'); $request->setActionName('Deny')wink moi par contre, j'avais pensé définir une erreur et que le plugin se charge de la traiter mais ca à pas l'air de fonctionner. Quelqu'un a-t-il déjà fait ca? si oui peut il m'aider? ou ce n'est peut etre pas une bonne idée...

Merci
Joyeux Noel à toute la communauté.

Vincent

Dernière modification par b_20100 (24-12-2008 15:14:10)

Hors ligne

 

#2 29-12-2008 22:36:39

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: Erreur personnalisée

Je suis pas sûr de comprendre ce que tu entends par "définir une erreur". Il n'y a pas, à ma connaissance, des centaines de moyens de gérer les erreurs dans le framework.

Soit tu lèves une exception de type Zend_Exception ou autre, à ce moment là, Zend va gérer ton erreur via le chemin standard, donc soit l'erreur sera affichée brutalement à l'écran, soit il va rediriger l'erreur vers un contrôleur d'erreur.

Ce contrôleur d'erreur sera probalement le même que celui défini dans ton exemple par setControllerName mais l'action sera peut être différente, selon la configuration que tu utilises.


Quelques tutoriaux Zend Framework !

Hors ligne

 

#3 03-01-2009 11:44:48

b_20100
Membre
Date d'inscription: 23-09-2008
Messages: 23

Re: Erreur personnalisée

Je tiens tout d'abord à vous souhaiter une excellente année 2009 replie de projets et de bonheur.

Si tu as bien compris keilnoth, je voulais définir une erreur via zend_exception et que le controlleur d'erreur standard soit utilisé mais visiblement ca fonctionne pas. Alors depuis j'ai aussi cherché par moi meme et je pense si pas avoir trouvé, avoir une piste sérieuse du pq ca fonctionne pas.
Mon erreur en question était levée dans un plugin qui vérifie si l'utilisateur a le droit ou pas de voir cette page et je pense avoir lu quelque part il y a quelque temps déjà que les exceptions levées dans un plugin n'était pas prisent en charge par le plugin errorhandler (mais ca a pas fait tilt dans ma tete tout de suite). C'est juste ce que je raconte ou pas?? Parce que j'ai esayé de déclancher une erreur avec zend_exception dans une action d'un controlleur et là mon errorhandle l'a bien triggée et a exécuté le code que je voulais.

Bonne journée

Vincent

Hors ligne

 

#4 03-01-2009 13:33:11

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: Erreur personnalisée

Personnellement, je le fais ainsi (code du bootstrap) :

Code:

try {

    if ( !self::getAppConfig($configMode) ) {
        echo "Config file is incorrect !";
        exit;
    }

    self::setDbConnection();
    self::setRouter();
    self::dispatch();
    
} catch ( Exception $e ) {
    self::printException($e);
}

Bon les méthodes "setDbConnection" et "setRouter" servent à configurer les choses auxquels elles se rapportent.

La plus intéressante est la fonction "dispatch" :

Code:

private static function dispatch()
{
    
    $front = Zend_Controller_Front::getInstance();

    $front->throwExceptions(true)
          ->registerPlugin(new Frontend_Core_Plugins_Router())
          ->registerPlugin(new Frontend_Core_Plugins_Layout())
          ->registerPlugin(new Frontend_Core_Plugins_Acl())
          ->registerPlugin(new Frontend_Core_Plugins_Locale())
          ->setRouter(self::$_router);

    $front->dispatch();
    
}

Toute mon application est donc lancée par cette dernière et lorsque n'importe quelle erreur exception est rencontrée, elle est remontée et passée à la méthode "printException".

Cette méthode te permettra d'afficher les erreurs comme tu le souhaites. De plus, dans ton code tu peux remonter des erreurs personnalisées à l'aide des "throw new Exception('blabla');".

Est-ce que c'est ce que tu souhaites ?

Hors ligne

 

#5 03-01-2009 13:59:55

b_20100
Membre
Date d'inscription: 23-09-2008
Messages: 23

Re: Erreur personnalisée

Oui c'est le principe que j'aimerai bien. Dans mon code générer une erreur (via throw... j'ai découvert la fonction y a pas longtemps) centraliser la gestion d'exception (afficher le message d'erreur dans la plupart des cas) et faire un log des erreurs à m'envoyé par mail ou autre.
Mais la ou j'ai un soucis, c'est que si j'utilise un throw dans mon plugin qui vérifie mes acl, l'errorhandler ne traite pas l'erreur; par contre si j'utilise un throw dans un controlleur la ca fonctionne très bien. Au début quand j'ai posté ce message, je pensais que j'allais devoir créer pour chaque erreur personnalisée le couple controlleur action. Maintenant, j'ai déjà regroupé la plupart de mes erreurs dans une seule action et j'ai créé une 2e action de gestion d'erreur juste pour le cas de l'erreur du plugin acl.

Mais dans ton cas, si j'ai bien compris, c'est pas géré par le pluggin d'erreur qui est livré en standard avec Zf mais par ta propre procédure printexception?

Hors ligne

 

#6 03-01-2009 18:31:10

acharrex
Membre
Lieu: Suisse
Date d'inscription: 27-04-2008
Messages: 135

Re: Erreur personnalisée

Oui, tout est géré par ma méthode "printException" qui se base sur un flag "isDeveloperMode" pour traiter le log :

- si à TRUE, l'erreur est affichée telle quelle
- si à FALSE, l'erreur est écrite dans un "rapport" (visible depuis la zone d'admin) et le visiteur est redirigé vers une page "Une erreur est survenue..."

Ce système ne gère que les erreurs soulevées par PHP. Les erreurs 404 et autres doivent être gérées différemment.

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