我有一个内核事件监听器设置(kernel.controller)来重定向用户,如果他没有登录。事件监听器被成功调用,但是我很难搞清楚如何重定向。这就是我得到的:
$cont = $event->getController('testpost');
$event->setResponse($cont);
这给了我错误:
Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse()
答案 0 :(得分:89)
如果你想从FilterControllerEvent
重定向,你应该使用这个:
public function onKernelController(FilterControllerEvent $event)
{
// do something
$event->setController(function() use ($redirectUrl) {
return new RedirectResponse($redirectUrl);
});
}
答案 1 :(得分:47)
您无法设置对FilterControllerEvent
对象的响应。您需要侦听kernel.request
事件,因为其GetResponseEvent
对象具有setResponse()
方法:
$route = 'route_name';
if ($route === $event->getRequest()->get('_route')) {
return;
}
$url = $this->router->generate($route);
$response = new RedirectResponse($url);
$event->setResponse($response);
答案 2 :(得分:4)
重定向'kernel.controller'事件
的更简单方法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')));
}
答案 3 :(得分:1)
答案 4 :(得分:-5)
这不是没有办法,我的朋友。您应该使用默认的Symfony Security来为您提供...