Bonjour,

Je suis en train de développer une application web avec Symfony 2 et FosUserBundle pour la gestion des utilisateurs.

Je fais une utilisation détournée de FosUserBundle : les utilisateurs ne peuvent pas s'enregistrer directement. C'est un administrateur qui gère les comptes utilisateurs. Le souci est que lors d'une inscription, mon utilisateur ADMIN est déconnecté et se retrouve connecté avec le nouvel utilisateur (Fonctionnement normal de FosUserBundle).

J'aimerai donc ne pas être déconnecté lors de la création d'un nouvel utilisateur.

Est-ce possible ? Surcharge du controller "registration" ?

Par avance merci.

GRM

6 réponses


GRM
Auteur

Merci deep95 pour ta réponse.
Tu me proposes de créer une entité temporaire avec un formulaire qui ensuite ira alimenter la vraie table user de fos ?

Salut !

Non tu n'as pas besoin de faire ça. Tu va juste crée ton utilisateur avec le userManager fournit par FosUserBundle.

Je te donne un exemple :

$user = new User();        
$form = $this->createForm(new RegistrationType(), $user);        
$form->submit($request);        
if($form->isValid()) {            
    $userManager = $this->get('fos_user.user_manager');            
    $exists = $userManager->findUserBy(array('email' => $user->getEmail()));
    if ($exists instanceof User) {
        throw new HttpException(409, 'Email already taken');
    }           
    $userManager->updateUser($user);
 }

Hello,

Tu peux créer l'utilisateur dans la console aussi

php app/console fos:user:create

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/command_line_tools.md

Tu peut aussi recopier le controller de la route "register" de FOSUserbundle en changeant certains paramètres ( tu garderas toutes les régles de validations de cette manière
( je crois qu'il faut regarder au niveau de la redirection )

Pour éviter d'etre déconnecté après la création d'un utlisateur. Il faut dans un premier temps rédefinir la méthode RegistrationController de FOSUserBundle, lien pour le faire : https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_controllers.md

Après que tu es terminé la rédéfinition du RegistrationController, dans la fonction RegisterAction(), tu supprimes les lignes suivantes :
if (null === $response = $event->getResponse()) {
$url = $this->container->get('router')->generate('fos_user_registration_confirmed');
$response = new RedirectResponse($url);
}
$dispatcher->dispatch(FOSUserEvents::REGISTRATION_COMPLETED, new FilterUserResponseEvent($user, $request, $response));

Enfin tu fais une redirection vers la page de ton choix.
Je l'ai essayé et ça marche.

****Bonjour
j'ai un problème similaire .En effet , j'ai trois types d'utilisateurs .mais aucuns des utilisateurs ne s'inscrit directement .L'admin cree les commerciaux les commerciaux creent les simples user .
Merci de vos retours