Bonjour,
j'ai un problème de redirection avec mon programme, j'ai l'erreur suivante :
Attempted to call an undefined method named "setResponse" of class "Symfony\Component\Security\Http\Event\InteractiveLoginEvent"
j'aimerai en fait être rediriger vers la page d'index ou homepage lorsque je ne possède pas de nom de domaine.
Voici mon code :
class LoginListener implements EventSubscriberInterface
......
public function __construct(EntityManager $e, ContainerInterface $cont,UrlGeneratorInterface $rout)
{
$this->em = $e;
$this->router = $rout;
$this->container = $cont;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::SECURITY_IMPLICIT_LOGIN => 'onSecurityInteractiveLogin',
);
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$session = $event->getRequest()->getSession();
$user = $this->container->get('security.context')->getToken()->getUser();
$route = 'homepage';
$url = $this->router->generate($route);generate($route);
if(!$session->get('sessionDomaine'))
{
$this->container->get('security.context')->setToken(null);
$session->getFlashBag()->add('error', 'Veuillez saisir un nom de domaine');
$response = new RedirectResponse($url);
$event->setResponse($response);
}
else
{
$domaine = $session ->get('sessionDomaine');
$sql = "SELECT u
FROM ApplicationSonataUserBundle:User u
LEFT JOIN u.domaines d
WHERE d.nom= ?1
AND u.id = ?2" ;
$query = $this->em->createQuery($sql);
$query->setParameter(1, $domaine->getNom());
$query->setParameter(2, $user->getId());
$result = $query->getOneOrNullResult();
if(!$result)
{
$this->container->get('security.context')->setToken(null);
$session->getFlashBag()->add('error', 'Vous n\'appartenez pas à ce domaine');
}
}
}
}
mon service :
app.form.login_utilisateur_listener:
class: AppBundle\EventListener\LoginListener
arguments: ["@doctrine.orm.entity_manager","@service_container","@router"]
tags:
- { name: kernel.event_listener, alias: app_user_login, event: security.interactive_login, method: onSecurityInteractiveLogin}
Je voudrais savoir comment résoudre ce problème de redirection, je ne comprends pas pourquoi cela ne fonctionne pas.
Je vous remercie
Bonsoir,
Effectivement, l'objet InteractiveLoginEvent ne contient pas de méthode "setResponse". L'erreur est donc logique.
Pourquoi ne pas utiliser "GetResponseEvent" au lieu de "InteractiveLoginEvent"?
Voir http://api.symfony.com/3.2/Symfony/Component/HttpKernel/Event/GetResponseEvent.html