8722 sujets

Développement web côté serveur, CMS

salut à tous,

je vous expose mon problème.
Voilà, je voudrais rediriger automatiquement les utilisateurs sur une page dédiée de type page de login qui ne nécessite pas d'authentification, lorsque l'appel à un webservice Rest déclenche une exception particulière (check des données, ...)

J'ai essayé deux solutions différentes :
- 1ere solution : overrider le bundle fosuserbundle et plus particulièrement le controller security et créer une nouvelle methode redirect (qui n"existe pas dans la classe originelle), afin de rediriger l'utilisateur vers une pseudo page d'accueil qui sera alors dédiée au traitement des exceptions. J'ai donc surchargé le controller fosuserbundle en en créant un autre dans un bundle de mon application, créé ma méthode redirectAction et le template associé dans app/ressources/fosuserbundle/views/security, le template étant dénommé redirect.html.twig.

Or, lorsque j'appelle cette methode par un return $this->redirect($this->get('router')->generate('fos_user_security_login', array('error' => $error))); je tombe à chaque fois sur une erreur 500. Est-ce le fait d'avoir créé une methode qui n'existait pas dans le controller surchargé qui me déclenche cette erreur ?

- 2e methode : créer une classe d'exception particuliere pour gérer mes exceptions.
Je crée donc une classe dédiée RedirectException, que j'appelle dans mes thrown, mais je ne sais comment y associer le template qui va m'afficher le code et le status d'erreur. Faut-il automatiquement que le template associé soit stocké dans app/ressources/twigbundle/views/exception, et qu'il surcharge un des templates exception présents dans le twig bundle ? ou peut-on y associer un autre template ?
Je voudrais que l'utilisateur soit redirigé sur une page qui ne nécessite pas d'authentification, donc sur une page de type page de login par exemple.

Voila, et là je ne sais pas trop comment faire en fait, si vous avez des idées, n'hésitez pas, je suis preneur

merci à tous,
bonne soirée
Réponse tardive...

Tu peux paramètrer ton security.yml pour qu'il n'inclut pas la page que tu aura créée, ensuite tu peux mettre un listener d'exception dans le lequel tu dispose d'un objet event à qui tu peux définir une ResponseHTTP et donc une redirection.

(Pour info, sans avoir à toucher à quoique ce soit, si c'est une ACCES REFUSE que tu veux gérer, tu peux surcharger les vues d'exception de twig par les tiennes, et il te suffira de faire un throw new AccessDeniedException qui te ramènera (en prod seulement) sur ton template twig. (ca fonctionne par code d'erreur, un access denied c'est 403 par exemple.