构造函数中的symfony2重定向

时间:2014-02-05 11:48:24

标签: php symfony

我想在特定的sutiation中对构造函数进行重定向。 我试着这样做:

return new \Symfony\Component\HttpFoundation\RedirectResponse($url);

并且像这样:

return $this->redirect($url);

但它不起作用。在其他所有方法中都有效,但由于某些原因,当此代码在构造函数中时,它不起作用。没有错误或警告。

如果您需要更多信息,请在评论中提问。 谢谢您的时间。

2 个答案:

答案 0 :(得分:1)

在构造函数中使用重定向的好主意。构造函数仅返回当前object of the class(在您的情况下为控制器的对象),并且它不能返回redirect object。也许你可以使用FrameworkBundle:Redirect:urlRedirect

在路线上解决你的任务
# redirecting the root
root:
    path: /
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /app
        permanent: true

检查How to Configure a Redirect without a Custom Controller

中的示例

答案 1 :(得分:0)

直接从控制器重定向的好主意。我宁愿抛出一些自定义异常。

class FooController{
    public function __construct(){
        if ( some_test ){
            throw RedirectionException(); // name it however you like
        }
    }
}

然后,在Symfony中,设置ExceptionListener,它将评估抛出的Exception类类型,并在必要时将您的应用程序重定向到另一个URL。此服务很可能依赖于@routing服务来生成备用URL目标。

服务配置:

services:
    kernel.listener.your_listener_name:
        class: Your\Namespace\AcmeExceptionListener
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

听众课程:

class AcmeExceptionListener
{
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        // You get the exception object from the received event
        $exception = $event->getException();

        if ( $exception instanceof RedirectionException ){
            $response = new RedirectResponse();

            $event->setResponse($response);
        }
    }
}

这种方式可以维护单个错误处理和重定向逻辑。太复杂了?