Symfony2重定向事件监听器?

Jon*_*atz 31 php symfony

我有一个内核事件监听器设置(kernel.controller)来重定向用户,如果他没有登录.事件监听器成功被调用,但是我很难搞清楚如何重定向.这是我得到的:

$cont = $event->getController('testpost');
$event->setResponse($cont);
Run Code Online (Sandbox Code Playgroud)

这给了我错误:

Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse() 
Run Code Online (Sandbox Code Playgroud)

NHG*_*NHG 92

如果你想重定向FilterControllerEvent你应该使用这个:

public function onKernelController(FilterControllerEvent $event)
{
    // do something
    $event->setController(function() use ($redirectUrl) {
        return new RedirectResponse($redirectUrl);
    });
}
Run Code Online (Sandbox Code Playgroud)


Eln*_*mov 48

您无法设置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);
Run Code Online (Sandbox Code Playgroud)

  • `$ this-> router`来自哪里? (8认同)
  • 可以将路由器注入到侦听器中,如[此答案](http://stackoverflow.com/a/10512631/133717)所示。 (2认同)