我有这个问题,我不知道如何解决。
我在控制器操作方法中,我进行测试,如果此测试是肯定的,我想重定向。
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')) }}
答案 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 %}
您必须传递代理对象(或任何您想要用作触发器的对象),但这对我来说是一个相当粗略的解决方案,可能是代码中的架构问题。