Symfony控制器备用重定向

时间:2015-01-06 22:31:50

标签: symfony redirect controller dashboard

我的symfony项目使用标准路由来访问由附加到指定路径的特定控制器生成的表单/内容。

但是,我正在尝试创建一个配置仪表板,它将从其他路径导入内容(主要是表单)并显示在单个页面上。 使用服务,我能够从相邻包中的控制器调用和检索数据。

到目前为止,我的仪表板系统的工作方式与我导入仪表板的各个表单的本机路由一样。

我正在努力解决的问题是,当我编辑并提交任何表单而不是重定向到其原生路线/页面时,如何重定向到仪表板。

我一直在使用以下代码:

public function editAction(Request $request, $raw=false, $id=3){
        $em = $this->getDoctrine()->getEntityManager();
        $item = $em->getRepository('StockBundle:Stock')->find($id);

        if(!$item)
            return;

        $stockform = $this->createForm(new StockType(), $item,
            array(
                'action' => $this->generateUrl('stock_edit', array('id'=>$id)),
                'method' => 'PUT'
            )
        )
        //->add('raw', 'true')
        ->add('submit', 'submit', array('label'=>'Update'))
        ->handleRequest($request);

        if($stockform->isValid()){
            $em->persist($item);
            $em->flush();

            if($raw)
                return $this->redirect($this->getRequest()->headers->get('referer'));
            else
                return $this->redirect($this->generateUrl('stock_list'));
        }

        /*******************
         * data to return based on source of request
         ************************/
        if($raw)
            return $stockform->createView();
        else
            return $this->render('StockBundle:StockController:edit.html.twig', array(
                'stockform' => $stockform->createView(),
            ));
    }

上面的代码是一个控制器,它可以生成表单,并在提交表单时充当目标。 $ raw 参数是我确定是否只返回表单数据或完整树枝生成标记的技术。

这很好,因为该操作作为服务公开,我可以将该操作作为函数调用传递必要的参数。

但是,提交表单时,我的$ raw参数不是提交数据的一部分,这意味着没有任何东西可以测试以确定要重定向到哪个路由。

我尝试使用->add('raw', 'true')向表单添加字段但是出现以下错误:

Could not load type "true"

我想知道是否有人可以就如何传递我的“原始”布尔值提出建议,以便在提交表单时可以访问它。

此外,正如我正在学习Symfony一样,如果我做错了事情并且有更好的方法来完成它,我将非常感谢。

提前致谢。

1 个答案:

答案 0 :(得分:0)

尝试检测请求方法以确定要执行的操作。

E.g:

if ($request->getMethod() == 'POST')
{
    //do form submit stuff
}
else
{
    //do normal stuff
}