将两个Form对象发送到视图层 - FOSRestBundle

时间:2015-09-13 07:54:21

标签: php forms symfony fosrestbundle

symfony2标准版(用于编辑操作)生成的crud控制器代码如下:

public function editAction($id)
    {
        // retrieve entity
        $entity= ....
        // create 2 forms (one for editing the current instance and one for deleting it)
        $editForm = $this->createEditForm($entity);
        $deleteForm = $this->createDeleteForm($id);

        // Rendering
        return $this->render('StoreTestBundle:Cup:edit.html.twig', array(
            'entity'      => $entity,
            'edit_form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
        ));
    }

但是当尝试使用FOSRestBundle为HTML内容实现相同的行为时,Web中的可用文档和示例仅考虑返回一个Form对象:

         /**
     * @Annotations\View(
     *  templateVar = "form"
     * )
*/


public function editCupAction($id)
{
    // retrieve object
    $entity= ....
    //return Form object
    return $this->createForm(new CupType, $entity);

}

如何添加第二张表格进行删除?我的目标是拥有一个包含两种表单的最终HTML。根据{{​​3}},似乎不可能返回一系列表单。非常感谢您的帮助。

与Ragdata先生讨论后:

我最终为我的控制器的某些操作(即返回表单的GET操作)删除了FOSRestBundle视图层。我会在这样的动作中使用手动渲染,因为捆绑的视图层是我的手。根据视图层文档,可能的方式:

- 从控制器返回一个表单。 - 将表单设置为仅视图的数据。 - 使用'形式'返回一个数组。密钥,包含表单。 - 返回包含验证错误的表单。

我没有完全承担第二点,如果它与setTemplateData()方法有关,我还没有尝试过......目前,我不能100%RESTful(有时我应该务实,特别是在缺乏时间的情况下。)因此,下面的代码将不起作用:

public function editCupAction($id)
    {
    ......

     return array(
                'entity'      => $entity,
                'edit_form'   => $editForm,
                'delete_form' => $deleteForm,
            );
    }

取而代之的是删除@annotation\view并使用模板渲染。因此,这些操作始终是HTML,没有其他格式,也没有内容协商。

关于使用带有两个按钮的表单的说明:

在这种情况下,

isClicked()与isValid()结合将始终抛出验证错误,因为删除和编辑不会处理常见字段(例如在菜谱示例中保存SaveAndAdd + Save),因此Symfony人员是好吧,我没有用两个按钮实现一个表格,因为我错误地说。在generate:crud生成的代码中有两个表单非常合适。

您的言论非常受欢迎。

0 个答案:

没有答案