34

如果用户未登录,我有一个内核事件侦听器设置(kernel.controller)来重定向用户。事件侦听器已成功调用,但是我无法弄清楚如何重定向。这是我得到的:

$cont = $event->getController('testpost');
$event->setResponse($cont);

这给了我错误:

Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse() 
4

4 回答 4

96

如果你想从你那里重定向,FilterControllerEvent你应该使用这个:

public function onKernelController(FilterControllerEvent $event)
{
    // do something
    $event->setController(function() use ($redirectUrl) {
        return new RedirectResponse($redirectUrl);
    });
}
于 2013-04-23T11:16:22.267 回答
54

您不能设置对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);
于 2012-10-16T14:39:03.017 回答
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')));
}
于 2013-03-14T01:13:06.683 回答
-8

这不是没有办法,我的朋友。你应该使用默认的 Symfony 安全来为你覆盖它......

于 2013-05-21T06:17:13.520 回答