从嵌入式控制器重定向

时间:2011-08-08 15:21:43

标签: php symfony

我使用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(至少我希望它的工作原理如此)。

在这种情况下是否可以正常重定向?或者我是从完全错误的角度接近这种情况(在多页上呈现的形式)?

2 个答案:

答案 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,它可以保存你的重定向数据,然后把它扔进你的嵌入式控制器。然后在父控制器中重定向。