我使用embedded controller呈现在多个页面上使用的表单:
枝条
{% render 'Bundle:Controller:someForm' %}
控制器
public function someFormAction()
{
// Some logic
...
if ($form->isValid()) {
...
$this->get('session')->setFlash('successful', "Woey!");
return $this->redirect($this->generateUrl('homepage'));
}
return $this->render('Bundle:Template:form.html.twig', array('form' => $form->createView()));
}
我需要在表单成功提交为post-redirect-get设计模式的一部分后重定向回主页。如果我按照上面的描述使用它,我会得到例外,因为嵌入式控制器的响应是302而不是200(至少我希望它的工作原理如此)。
在这种情况下是否可以正常重定向?或者我是从完全错误的角度接近这种情况(在多页上呈现的形式)?
答案 0 :(得分:9)
答案 1 :(得分:0)
也许这会对你有所帮助。如果在嵌入式控制器中找不到资源,我用它来显示404页面。
try
{
return $this->render('MyBundle:Table:list.html.twig', $data);
}
catch(\Twig_Error_Runtime $e)
{
if($e->getPrevious() instanceof NotFoundHttpException)
{
throw $this->createNotFoundException();
}
else throw $e;
}
你可以制作一个RedirectHttpException
,它可以保存你的重定向数据,然后把它扔进你的嵌入式控制器。然后在父控制器中重定向。