Symfony2重定向事件监听器?

时间:2012-10-16 14:02:46

标签: php symfony

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

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

这给了我错误:

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

5 个答案:

答案 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)

这是关于做(差不多)同样事情的类似问题。它应该给你一个线索。

Symfony 2 - redirect if the user is logged in

希望它有所帮助。

答案 4 :(得分:-5)

这不是没有办法,我的朋友。您应该使用默认的Symfony Security来为您提供...