FOSUserBundle et PUGX multiusers bundle

Par podisto, il y a 10 ans


Salut les génies! Je bosse sur une application ou j'ai différents utilisateurs qui ne fournissent pas les mêmes informations à l'enregistrement donc j'ai utilisé PUGX pour ça. J'aimerais qu'une fois que l'administrateur créé un agent, ce dernier change son mot de passe à sa première connexion et j'ai une erreur bizarre à la connexion "An exception has been thrown during the compilation of a template ("Notice: Undefined variable: test") in "FOSUserBundle:ChangePassword:changePassword_content.html.twig". Cette variable n'exite pas je ne sais pas d'ou sa vient.
Au passage voici mon code:

<?php /** * Created by PhpStorm. * User: coura * Date: 15/09/2015 * Time: 10:44 */ namespace App\UtilisateursBundle\Redirection; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\Routing\RouterInterface; use Symfony\Component\Security\Core\SecurityContext; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; class LoginListener { private $security; private $router; private $dispatcher; public function __construct(SecurityContext $security, RouterInterface $router, EventDispatcherInterface $dispatcher) { $this->security = $security; $this->router = $router; $this->dispatcher = $dispatcher; } public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) { //on teste si l'utilisateur s'est authentifié a partir du formulaire de login if($this->security->isGranted('IS_AUTHENTICATED_FULLY')) { $user = $event->getAuthenticationToken()->getUser(); if($user->getLastLogin() == null) { $this->dispatcher->addListener(KernelEvents::RESPONSE, array( $this, 'onKernelResponse' )); } } } public function onKernelResponse(FilterResponseEvent $event) { $response = new RedirectResponse($this->router->generate('fos_user_change_password')); $event->setResponse($response); } }

8 réponses

nicovak, il y a 10 ans

C'est dans la vue le problème FOSUserBundle:ChangePassword:changePassword_content.html.twig
Là tu nous colle ton Listener.

podisto, il y a 10 ans

Si c'est dans la vue mais ce qui est bizarre c'est que pas touché la vue j'ai juste surchargé voici la vue :

{% trans_default_domain 'FOSUserBundle' %} <form action="{{ path('fos_user_change_password') }}" {{ form_enctype(form) }} method="POST" class="fos_user_change_password"> {{ form_widget(form) }} <div> <input type="submit" value="{{ 'change_password.submit'|trans }}" /> </div> </form>

Ou va t-il chercher cette variable test ??

Florent Ecker, il y a 10 ans

Salut.j'ai le même problème au même moment et je ne trouve pas de solution.je n'ai pas surchargé le formulaire.Je poste si je trouve et vice et versa (comme dit la chanson).
A bientot avec de meilleures news.

podisto, il y a 10 ans

Salut Florent! ok je vais m'y remettre ce soir j'avais implémenté ça dans un de mes projets mais la bas je n'avais pas utilisé de listener. J'avais ajouté un champ etat de type boolean sur la table user de fos et la je testai au login si c'est a false je le redirigeais vers le formulaire de changement de mot de passe. Mais je reconnais que c'était pas propre du tout!

nicovak, il y a 10 ans

Essai sans le

{% trans_default_domain 'FOSUserBundle' %}

Je crois avoir déja eu une erreur du genre, ca ne coute rien d'éssayer.

podisto, il y a 10 ans

Hum! Merci mais ça passe toujours pas! C'est vraiment bizarre !!

podisto, il y a 10 ans

Toujours pas de solution ??

podisto, il y a 10 ans

Encore moi! Bon j'ai résolu mon problème en fait c'est pas seulement au niveau du changement du mot de passe c'est le même problème pour la modification des infos du profil. Voila ce que j'ai fait: j'ai redéfinis le controller changePassword et rediriger vers un template twig contenant le formulaire de modification du mot de passe. Ci dessous les codes:

<?php namespace App\UtilisateursBundle\Controller; use App\UtilisateursBundle\Entity\Agent; use App\UtilisateursBundle\Form\ChangePasswordType; use App\UtilisateursBundle\Form\ProfileAdministrateurType; use App\UtilisateursBundle\Form\RegistrationAgentType; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; use FOS\UserBundle\FOSUserEvents; use FOS\UserBundle\Event\FormEvent; use FOS\UserBundle\Event\FilterUserResponseEvent; use FOS\UserBundle\Event\GetResponseUserEvent; use FOS\UserBundle\Model\UserInterface; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Security\Core\Exception\AccessDeniedException; class AdminServiceController extends Controller { public function registerAgentAction() { $agent = new Agent(); $form = $this->get('form.factory')->create(new RegistrationAgentType(), $agent); return $this->render('@Utilisateurs/Utilisateurs/ajouteragent.html.twig', array( 'form' => $form->createView(), )); } public function listeAgentAction() { return $this->render('@Utilisateurs/Utilisateurs/listeagent.html.twig'); } /** * Change user password */ public function changePasswordAction(Request $request) { $user = $this->getUser(); if (!is_object($user) || !$user instanceof UserInterface) { throw new AccessDeniedException('This user does not have access to this section.'); } /** @var $formFactory \FOS\UserBundle\Form\Factory\FactoryInterface */ $formFactory = $this->get('fos_user.change_password.form.factory'); $form = $formFactory->createForm(); $form->setData($user); $form->handleRequest($request); if ($form->isValid()) { /** @var $userManager \FOS\UserBundle\Model\UserManagerInterface */ $userManager = $this->get('fos_user.user_manager'); $event = new FormEvent($form, $request); $userManager->updateUser($user); if (null === $response = $event->getResponse()) { $url = $this->generateUrl('fos_user_profile_show'); $response = new RedirectResponse($url); } return $response; } return $this->render('@Utilisateurs/Utilisateurs/agenteditpassword.html.twig', array( 'form' => $form->createView(), )); } } <div class="col-md-10"> <div class="col-md-8 col-md-offset-2"> <form action="{{ path('adminservice_changepassword') }}" method="post" class="form-horizontal"> {{ form_widget(form) }} <input type="submit" value="Valider" /> </form> </div> </div>

Florent si tu trouve autre chose je suis toujours partant. Merci nicovak