Symfony 2: 302 HTTP状态码和异常

4

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

我在控制器的操作方法中进行测试,如果测试结果为正,我想要重定向。

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)

我无法进行重定向,可能是什么原因?

重要提示:我在twig模板中调用了这个控制器动作。

{{ render(controller('MyBundle:Default:content')) }}

1
如果 () { 什么?$this->render(MyBundle:Default:content.html.twig'); 缺少在 MyBundle 前的引号。 - sjagr
无论什么,一个条件。 - mlwacosmos
我需要看到有效的代码 - 在我排除你的问题中可能存在的任何解析错误之前,我无法提供帮助(请确保已经过测试)。 - sjagr
好的... 这是条件。 - mlwacosmos
2个回答

1

尝试使用generateUrl()辅助函数来进行重定向:

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

你实际的问题是由于在Twig模板中尝试发送重定向引起的。


它引起了相同的问题,但我忘记说一些可能很重要的事情...我更新了帖子。 - mlwacosmos
3
@mlwacosmos 是的,这非常关键。参见此 Google 群组讨论。在 Twig 模板中执行像重定向这样的操作就像在 PHP 发送输出后尝试调用 header() 函数。 - sjagr

1
解决方案是将渲染和重定向逻辑移动到/accueil控制器操作中,因为当前尝试在已加载的页面上执行PHP header重定向是不可能的。或者,您可以通过在要加载的content.html模板中执行javascript window.location重定向来实现,方法如下:
{% if agent is not defined %}<script>window.location = '{{ path('new_route') }}';</script>{% endif %}

你需要传递代理对象(或任何你想用作触发器的东西),但这似乎是一个粗糙的解决方案,可能是你代码中架构问题的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接