FAQ SymfonyConsultez toutes les FAQ
Nombre d'auteurs : 17, nombre de questions : 81, dernière mise à jour : 18 juin 2017 Ajouter une question
Les questions redondantes se multipliant sur le forum Symfony, nous avons choisi de créer cette FAQ afin de regrouper les questions qui sont posées fréquemment.
Vos remarques et idées sont les bienvenues. Et pourquoi pas votre aide ! S'il vous prend l'envie de tailler votre plus belle plume et de retrousser vos manches, il y a de quoi faire !
Ce code s'inspire du code sur « Comment récupérer les constantes d'une entité pour les afficher dans un formulaire ? ».
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /** * Retourne le nom du status en cours, en minuscules * * @return string */ public function getNomStatus() { $nom = ''; $reflect = new \ReflectionClass(__CLASS__); $constants = array_keys($reflect->getConstants()); $i = 0; $end = count($constants); while ($i<$end && '' == $nom) { // On compare la valeur du status ($this->status) avec celles de l'entité if ('S_' == substr($constants[$i], 0, 2) && $reflect->getConstant($constants[$i]) == $this->status) { $nom = 'user_'.strtolower($constants[$i]); } $i++; } return $nom; } |
Symfony2 permet de facilement effectuer des traitements après une connexion réussie d'un utilisateur. Il faut définir et nommer un service « security.authentication.success_handler » et lui faire implémenter l'interface AuthenticationSuccessHandlerInterface.
Dans l'exemple présenté ci-dessous, il s'agit de rediriger un utilisateur après connexion vers un formulaire d'acceptation des conditions générales d'utilisation (CGU). La valeur de la propriété cguOk (booléen) de l'entité User, est testée pour déterminer s'il y a redirection.
L'interface AuthenticationSuccessHandlerInterface définit une méthode onAuthenticationSuccess :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php /* * This file is part of the Symfony framework. * * (c) Fabien Potencier <fabien@symfony.com> * * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ namespace Symfony\Component\Security\Http\Authentication; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\HttpFoundation\Request; /** * Interface for a custom authentication success handler * * If you want to customize the success handling process, instead of * overwriting the respective listener globally, you can set a custom success * handler which implements this interface. * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ interface AuthenticationSuccessHandlerInterface { /** * This is called when an interactive authentication attempt succeeds. This * is called by authentication listeners inheriting from * AbstractAuthenticationListener. * * @param Request $request * @param TokenInterface $token * * @return Response the response to return */ function onAuthenticationSuccess(Request $request, TokenInterface $token); } |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | parameters: security.authentication.success_handler.class: Xxx\YourBundle\Component\OverSf2\Security\Http\Authentication\AuthenticationSuccessHandler services: security.authentication.success_handler: class: %security.authentication.success_handler.class% public: false arguments: ['@router', '@security.user.entity_manager'] |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <?php namespace Xxx\YouBundle\Component\OverSf2\Security\Http\Authentication; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Routing\RouterInterface; use Doctrine\ORM\EntityManager; use Xxx\YourBundle\Entity\User; /** * Custom authentication success handler */ class AuthenticationSuccessHandler implements AuthenticationSuccessHandlerInterface { private $router; private $em; /** * Constructor * @param RouterInterface $router * @param EntityManager $em */ public function __construct(RouterInterface $router, EntityManager $em) { $this->router = $router; $this->em = $em; } /** * This is called when an interactive authentication attempt succeeds. This * is called by authentication listeners inheriting from AbstractAuthenticationListener. * @param Request $request * @param TokenInterface $token * @return Response The response to return */ function onAuthenticationSuccess(Request $request, TokenInterface $token) { //Si la propriété cguOk est vraie... if (! $token->getUser()->isCguOk()) { //On redirige vers l'accueil $uri = $this->router->generate('_home'); } //sinon... else { //On redirige vers le formulaire des CGU $uri = $this->router->generate('_route_to cgu_form'); } return new RedirectResponse($uri); } } |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.