索引视图中的“删除表单”


"Delete Form" within Index view

问题

如何使用 {{ form(deleteForms) }} 在我的"索引"视图中呈现"删除表单"

描述:

我已经按照这个SO答案中描述的步骤进行操作,但是我想进一步简化它。

这里描述的内容是将以下内容添加到您的索引操作中:

//ProductController.php
//...
$deleteForms = array();
foreach ($entities as $entity) {
$deleteForms[$entity->getId()] = $this->createDeleteForm($entity->getId())->createView();
}
return $this->render('AppBundle:Product:index.html.twig', array(
'entities' => $entities,
'deleteForms' => $deleteForms,
));

并在您看来添加以下内容: {% 表示实体 %} 中的实体 //... {{ form_widget(deleteForms[entity.id]) }} {{ 'links.admin.form.delete' | trans({}, 'FooBundle') }} ...// {% endfor %}

这工作正常,我的小问题是为什么要在任何地方(更新/显示等)手动呈现表单,否则我只是这样做:

{% for entity in entities %}
//...
{{ form(deleteForms) }}
...//
{% endfor %}

所以我尝试了这个,但它导致了这个错误:

呈现

模板期间引发异常 ("可捕获的致命错误:参数 1 传递给 Symfony''Component''Form''FormRenderer::renderBlock() 必须是实例 的 Symfony''Component''Form''FormView,数组给定,调用 C:''MyBundle''app''cache''dev''twig''f6''75''ae2ae7bebde1f4083ba543a1680ecdb4b1c359141e57ac01862c94660f2e.php 在第 176 行并定义")在 AppBundle:Product:index.html.twig at 行 49.

我已经用谷歌搜索了错误,该错误表明我需要调用"->createView()",但这已经在foreach数组中调用了。无论如何,我都尝试在"退货"部分执行此操作:

return $this->render('AppBundle:Product:index.html.twig', array(
            'entities' => $entities,
            'deleteForms' => $deleteForms->createView(),
));

所有这些操作都会导致另一个错误:

错误:在非对象上调用成员函数 createView()

所以现在我完全迷失了。任何正确方向的指示将不胜感激。

您似乎正在创建一个以实体 ID 作为键的"deleteForms"数组,因此当您在模板中调用它们时,您应该使用相同的格式。

例如。。

{% for entity in entities %}
    //...
    {{ form(deleteForms[entity.id]) }}
    ...//
{% endfor %}