IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

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 !

SommaireSymfony 2Gestion des utilisateurs avec Symfony 2 (2)
précédent sommaire suivant
 

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; 
}
Dans Twig, on peut simplement écrire : user.getNomStatus pour récupérer par exemple user_s_enabled.

Mis à jour le 14 novembre 2015 Siguillaume

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); 
}
Définition du service dans le fichier de configuration services.yml du bundle :

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']
La classe du service défini ci-dessus :

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); 
   } 
}

Mis à jour le 14 novembre 2015 pc.bertineau Siguillaume

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 ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les 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.