I have a kernel event listener setup (kernel.controller) to redirect the user if he's not logged in. The event listener is succesfully getting called, however I'm having trouble figuring out how to redirect. Here's what I got:
$cont = $event->getController('testpost');
$event->setResponse($cont);
Which gives me the error:
Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse()
If you wanna redirect from FilterControllerEvent
you should use this one:
public function onKernelController(FilterControllerEvent $event)
{
// do something
$event->setController(function() use ($redirectUrl) {
return new RedirectResponse($redirectUrl);
});
}
You can't set a response to a FilterControllerEvent
object. You need to listen for the kernel.request
event because its GetResponseEvent
object has the setResponse()
method:
$route = 'route_name';
if ($route === $event->getRequest()->get('_route')) {
return;
}
$url = $this->router->generate($route);
$response = new RedirectResponse($url);
$event->setResponse($response);
More ore less clear way to redirect on 'kernel.controller' event
public function onKernelController(FilterControllerEvent $event)
{
/* @var $controller \Symfony\Bundle\FrameworkBundle\Controller\Controller */
$controller = $event->getController()[0]; // PHP 5.4 or $controller = $controller[0];
throw new HttpException(307, null, null, array('Location' => $controller->generateUrl('homepage')));
}
Here is a similar question about doing (almost) the same thing. It should give you a clue.
Symfony 2 - redirect if the user is logged in
Hope it helps.
This ain't no way to go, my friend. You should use a default Symfony Security to cover that for you...
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.