Ajouter une valeur par défaut rôle au cours de l'enregistrement de l'utilisateur avec FOSUserBundle
Version : Symfony 2.2
J'essaye d'ajouter un rôle par défaut lorsqu'un utilisateur de s'inscrire sur mon site. J'utilise FOSUserBundle et je vois bien que quand un utilisateur à enregistrer le rôle de champ est vide dans une base de données.
Je commence avec cet énorme paquet et il n'est pas très facile à comprendre. J'ai donc lu toute la documentation et je ne suis pas sur que faire.
Pour l'instant, j'ai créer un Événement ajouter ce rôle de manière dynamique, mais il ne fonctionne pas (je n'ai pas d'erreur mais ma base de données est toujours vide) je ne suis même pas sur que c'est la bonne façon de le faire ?
Mon Cas :
use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class AddDefaultRoleListener implements EventSubscriberInterface {
private $container;
public function __construct(Container $container)
{
$this->container = $container;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_SUCCESS => 'onAddDefaultRoleSuccess',
);
}
public function onAddDefaultRoleSuccess(FormEvent $event)
{
$doctrine = $this->container->get('doctrine');
$em = $doctrine->getManager();
$user = $event->getForm()->getData();
$user->addRole('ROLE_USER');
//$user->setRoles(array('ROLE_USER'));
$em->persist($user);
}
}
Comme vous le voyez j'ai créer un simple événement à l'écoute sur les REGISTRATION_SUCCESS, mais rien ne semble fonctionner. C'est mon premier essai avec des Événements et des services. Donc si quelqu'un a un conseil, je vais le prendre 🙂
Grâce
Vous devez vous connecter pour publier un commentaire.
Ce que j'ai fait est de remplacer l'entité constructeur:
Voici un morceau de mon Entity/User.php
C'est la manière paresseuse. Si vous voulez que le droit et la meilleure façon de voir les @RayOnAir réponse
Recommandé de le faire comme l'a indiqué un des principaux facteurs contribuant à la FOSUserBundle (dans le commentaire ici lié) est d'enregistrer un Écouteur d'Événement sur la REGISTRATION_SUCCESS événement et d'utiliser la
$event->getForm()->getData()
d'accès de l'utilisateur et de le modifier.A la suite de ces lignes directrices, j'ai créé la suite de l'auditeur (qui fonctionne!):
Aussi, le service doit être inscrit comme suit:
Avis que l'ajout d'un rôle par défaut de l'Utilisateur de la classe de __construct() peut avoir quelques problèmes, comme indiqué dans cette autre réponse.
Je pense que @RayOnAir solution est la bonne façon de le faire. Mais il ne fonctionne pas en raison de FOS rôle par défaut de la manipulation
de rendre possible persistent rôle par défaut dans la base de données, un besoin de redéfinir l'Utilisateur::setRoles (), méthode (l'ajouter à votre Utilisateur de l'entité):
Testé sous:
Version de Symfony 2.3.6,
FOSUserBundle 2.0.x-dev
ROLE_USER
est le rôle par défaut de FOSUserBundle github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Model/..."ROLE_USER"
ne peuvent pas travailler parce que lesUser addRole()
méthode renvoieif ($role === static::ROLE_DEFAULT)
(oùROLE_DEFAULT
est"ROLE_USER"
).Vous pouvez ajouter un Événement Abonné à une Classe de Formulaire et d'utiliser la forme de l'événement "formEvents::POST_SUBMIT"
Maintenant la logique de l'ajout du rôle du champ réside dans l'abonné classe
$this->roles = ['ROLE_USER']
à l'intérieur deconstruct()
méthode de laEntity/User.php
classe, et par l'appel deparent::__construct()
méthode.Ok maintenant, c'est de travailler avec que :
- Je changer mon port d'écoute et de savoir utiliser REGISTRATION_COMPLETED. Si quelqu'un a une meilleure idée pour le faire, n'hésitez pas 🙂