Symfony2 重定向事件侦听器



我有一个内核事件侦听器设置(kernel.controller),以便在用户未登录时重定向用户。事件侦听器已成功调用,但是我在弄清楚如何重定向时遇到了麻烦。这是我得到的:

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

这给了我错误:

Fatal error: Call to undefined method SymfonyComponentHttpKernelEventFilterControllerEvent::setResponse() 
如果你想

FilterControllerEvent重定向,你应该使用这个:

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

不能设置对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);

在"kernel.controller"事件上重定向的方法不太清楚

public function onKernelController(FilterControllerEvent $event)
{
    /* @var $controller SymfonyBundleFrameworkBundleControllerController */
    $controller = $event->getController()[0]; // PHP 5.4 or $controller = $controller[0];
    throw new HttpException(307, null, null, array('Location' => $controller->generateUrl('homepage')));
}

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

最新更新