Symfony2 事件侦听器的重定向?

2022-08-30 13:28:05

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

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

这给了我一个错误:

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

答案 1

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

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

答案 2

不能设置对对象的响应。您需要侦听事件,因为它的对象具有以下方法:FilterControllerEventkernel.requestGetResponseEventsetResponse()

$route = 'route_name';

if ($route === $event->getRequest()->get('_route')) {
    return;
}

$url = $this->router->generate($route);
$response = new RedirectResponse($url);
$event->setResponse($response);

推荐