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

时间:2014-12-21 19:37:46

标签: php symfony twig

问题

如何使用{{form(deleteForms)}}

在我的“索引”视图中呈现“DeleteForm”

说明

我已经按照this SO回答中描述的步骤进行了操作,但是我想再简化一下。

所描述的内容是将以下内容添加到indexAction:

//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 %}

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

  

在渲染模板期间抛出了异常   (“Catchable Fatal Error:Argument 1传递给   Symfony \ Component \ Form \ FormRenderer :: renderBlock()必须是一个实例   Symfony \ Component \ Form \ FormView,给定的数组,调用   C:\ MyBundle \程序\缓存\ dev的\树枝\ F6 \ 75 \ ae2ae7bebde1f4083ba543a1680ecdb4b1c359141e57ac01862c94660f2e.php   在第176行并在AppBundle中定义了“):产品:index.html.twig at line   49。

我用Google搜索了一个错误,表明我需要调用“ - > createView()”,但这已经在foreach数组中被调用了。我试着在返回部分尝试这样做:

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

所有这一切都会导致另一个错误:

  

错误:在非对象

上调用成员函数createView()

所以现在我完全迷失了。 任何指向正确方向的人都会非常感激。

1 个答案:

答案 0 :(得分:3)

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

例如......

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