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
生成的代码中有两个表单非常合适。
您的言论非常受欢迎。