Domanda

I want to redirect my user after he clicks on the registration link but I'm stuck because there is no setResponse method in a FilterUserResponseEvent

RegistrationListenner.php

public static function getSubscribedEvents()
{
    return array(
        FOSUserEvents::REGISTRATION_CONFIRMED => 'onRegistrationConfirmed',
    );
}


public function onRegistrationConfirmed(FilterUserResponseEvent $event)
{
    $url = $this->router->generate('my_route', array('foo' => 'bar'));
    $response = new RedirectResponse($url);
    $event->setResponse(new RedirectResponse($url));
}

services.xml

    <service id="myapp.profile" class="MyApp\UserBundle\EventListener\ProfileListener">
        <tag name="kernel.event_subscriber"/>
        <argument type="service" id="router" />
    </service>
È stato utile?

Soluzione

For this purpose there is the GetResponseUserEvent at the REGISTRATION_CONFIRM event, which asks for a response:

public static function getSubscribedEvents()
{
    return array(
            FOSUserEvents::REGISTRATION_CONFIRM => 'onRegistrationConfirm',
    );
}

public function onRegistrationConfirm(GetResponseUserEvent $event)
{
    $url = $this->router->generate('my_route', array('foo' => 'bar'));
    $response = new RedirectResponse($url);
    $event->setResponse(new RedirectResponse($url));
}

Altri suggerimenti

in my version $event doesn't have setResponse() method but encapsulate the RedirectResponse object.

As object has already passed by reference you can use the setTargetUrl() to change the target url of the RedirectResponse.

You can do the redirection with this line :

$event->getResponse()->setTargetUrl("http://panel.it-strategy.fr")));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top