Symfony 2:302 http状态和异常

时间:2014-09-25 15:40:46

标签: symfony redirect

我有这个问题,我不知道如何解决。

我在控制器操作方法中,我进行测试,如果此测试是肯定的,我想重定向。

public function contentAction() {
    $response = $this->render('MyBundle:Default:content.html.twig');

    if(!is_object($agent)) {
       $response = $this->redirect($this->get('router')->generate('new_route', 
                    array('error_message_key' => $error_message)));
    } 

    return $response;    
}

通过重定向,我有一个例外

Error when rendering "http://alternativefirst/app_dev.php/accueil/" (Status code is 302)

我无法进行此重定向?为什么会这样?

重要事项:我在带有

的树枝模板中调用此控制器操作
{{ render(controller('MyBundle:Default:content')) }}

2 个答案:

答案 0 :(得分:1)

尝试重定向的generateUrl()辅助功能:

$response = $this->redirect($this->generateUrl('new_route', array(
    'error_message_key' => $error_message,
)));

您的实际问题是由trying to send a redirect within a Twig template引起的。

答案 1 :(得分:1)

解决方案是将呈现和重定向逻辑移动到/accueil控制器操作中,因为就像现在一样,您正在尝试在已加载的页面上执行PHP标头重定向,是不可能的。或者,您可以通过执行以下操作在您尝试加载的content.html模板中执行javascript window.location重定向:

{% if agent is not defined %}<script>window.location = '{{ path('new_route') }}';</script>{% endif %}

您必须传递代理对象(或任何您想要用作触发器的对象),但这对我来说是一个相当粗略的解决方案,可能是代码中的架构问题。