简体   繁体   English

Symfony2 重定向事件侦听器?

[英]Symfony2 redirect for event listener?

I have a kernel event listener setup (kernel.controller) to redirect the user if he's not logged in. The event listener is succesfully getting called, however I'm having trouble figuring out how to redirect.如果用户未登录,我有一个内核事件侦听器设置 (kernel.controller) 来重定向用户。成功调用事件侦听器,但是我无法弄清楚如何重定向。 Here's what I got:这是我得到的:

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

Which gives me the error:这给了我错误:

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

If you wanna redirect from FilterControllerEvent you should use this one: 如果你想从FilterControllerEvent重定向,你应该使用这个:

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

You can't set a response to a FilterControllerEvent object. 您无法设置对FilterControllerEvent对象的响应。 You need to listen for the kernel.request event because its GetResponseEvent object has the setResponse() method: 您需要侦听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);

More ore less clear way to redirect on 'kernel.controller' event 更糟糕的方法是重定向'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')));
}

Here is a similar question about doing (almost) the same thing. 这是一个关于做(差不多)同样事情的类似问题。 It should give you a clue. 它应该给你一个线索。

Symfony 2 - redirect if the user is logged in Symfony 2 - 如果用户已登录,则重定向

Hope it helps. 希望能帮助到你。

This ain't no way to go, my friend. 我的朋友,这不是没有办法的。 You should use a default Symfony Security to cover that for you... 您应该使用默认的Symfony Security来为您提供...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM