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

1 réponse


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