Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-01-2013 12:38:49

imsouf
Membre
Date d'inscription: 19-12-2012
Messages: 12

Traiter les exceptions renvoyées par un contrôleur

Bonjour,

J'émets ici une réflection que j'ai eu sans savoir si elle est applicable, ou si autre chose à été pensé pour gérer ce cas de figure

j'aimerais pouvoir traiter les exceptions renvoyées par mes contrôleurs afin d'afficher le message d'erreur lié.

Voici un cas particulier :

Du côté client : un utilisateur souhaite accéder à une page à laquelle l'accès lui est restreint.

Du côté serveur : je rentre dans mon controller, je vérifie les droits d'accès. L'utilisateur n'a pas accès alors je je déclanche une AccessNotAllowedException.

Cette exception envoyée depuis un controller pourrait vouloir dire à l'application
   "répond au client en lui envoyant la vue associée : 'AccesNotAllowed.phtml' "
Au lieu de lui envoyer un erreur 404 avec mon layout pour les pages 404, ou de le rediriger sur une autre page.

En vous remerciant

Dernière modification par imsouf (02-01-2013 15:26:26)

Hors ligne

 

#2 03-01-2013 12:20:58

bakura
Administrateur
Date d'inscription: 30-01-2010
Messages: 353

Re: Traiter les exceptions renvoyées par un contrôleur

Je travaille sur un module REST pour Zend Framework 2 et c'est justement ce que je fais. Concrètement, dans mes contrôleurs je peux lever des exceptions (par exemple UnauthorizedException,MethodNotAllowedException...) qui correspondent à des erreurs HTTP, et automatiquement ces exceptions sont attrapées, et j'injecte le code de réponse dans l'objet "Response" : https://github.com/zf-fr/ZfrRest/pull/8

Le fichier intéressant, c'est d'ajouter un listener qui va écouter l'évènement MvcEvent::DISPATCH_ERROR. Voici tout d'abord ma classe de listener : https://github.com/bakura10/ZfrRest/blo … stener.php

Comme tu le vois, dans la fonction attach, je m'abonne à l'évènement MvcEvent::EVENT_DISPATCH_ERROR, et je lui demande d'appeler la fonction "onDispatchError" lorsque cet évènement se produit. Puis dans ladite méthode, je récupère l'exception qui a été levée, et je peux changer le contenu de ma réponse. Dans ton cas, comme tu changes le view model en quelque sorte, il va surement falloir que tu t'abonnes également à l'évènement RENDER_ERROR.

Ensuite, pour effectivmenet attacher le listener, je le fais dans le module, au niveau de la fonction onBootstrap : https://github.com/bakura10/ZfrRest/blo … Module.php

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