Forms 如何从包含实体列表(CRUD)的模板中删除实体? 说明:

Forms 如何从包含实体列表(CRUD)的模板中删除实体? 说明:,forms,symfony,crud,symfony-2.3,Forms,Symfony,Crud,Symfony 2.3,我已生成实体的CRUD,获得以下默认操作: indexAction():列出所有实体 showAction($id):查找(按id)并显示实体 deleteAction($id):删除实体 另一个行动 因此,我发现我只能删除使用param$id(例如:showAction($id))的操作中的实体,但是我想删除索引模板中的实体,因为我将一个步骤保存给用户。 deleteAction需要请求、ID和使用POST方法 我试着编写如下代码: <a href="{{ path('entity_

我已生成实体的CRUD,获得以下默认操作:

  • indexAction():列出所有实体
  • showAction($id):查找(按id)并显示实体
  • deleteAction($id):删除实体
  • 另一个行动
因此,我发现我只能删除使用param$id(例如:showAction($id))的操作中的实体,但是我想删除索引模板中的实体,因为我将一个步骤保存给用户。

deleteAction需要请求、ID和使用POST方法

我试着编写如下代码:

<a href="{{ path('entity_delete', { 'id': entity.id }) }}" class="btn">
 <img src="{{ asset('bundles/acme/images/delete.png') }}" ... />
</a>
如您所见,$id参数对于方法
createDeleteForm($id)
是必需的,但我无法从
indexAction()
获得它

问题:
解决此问题的最佳方法是什么?

如果您只想拥有与索引中的项目一样多的删除按钮,请看下面的方法

在indexAction中,添加以下循环,不要忘记将参数传递给视图

public function indexAction()
{
    $em = $this->getDoctrine()->getManager();

    $entities = $em->getRepository('FooBundle:Link')->findAll();

    $deleteForms = array();

    foreach ($entities as $entity) {
        $deleteForms[$entity->getId()] = $this->createDeleteForm($entity->getId())->createView();
    }

    return array(
        'entities' => $entities,
        'deleteForms' => $deleteForms,
    );
}
基本上,我只是循环遍历所有实体,并使用crud生成的内置方法创建相应的删除表单,将每个表单存储在一个数组中,并将其传递给视图

public function indexAction()
{
    $em = $this->getDoctrine()->getManager();

    $entities = $em->getRepository('FooBundle:Link')->findAll();

    $deleteForms = array();

    foreach ($entities as $entity) {
        $deleteForms[$entity->getId()] = $this->createDeleteForm($entity->getId())->createView();
    }

    return array(
        'entities' => $entities,
        'deleteForms' => $deleteForms,
    );
}
然后在视图中,只需添加edit.html.twig生成视图中已经可用的表单,并编辑表单_小部件的参数:

<form action="{{ path('foo_delete', { 'id': entity.id }) }}" method="post">
    <input type="hidden" name="_method" value="DELETE" />
    {{ form_widget(deleteForms[entity.id]) }}
    <button type="submit" class="btn btn-small">
        <i class="icon-trash"></i>
        {{ 'links.admin.form.delete' | trans({}, 'FooBundle') }}
    </button>
</form>

{{form_小部件(deleteForms[entity.id])}
{{'links.admin.form.delete'{}trans({},'FooBundle')}

为什么不直接向deleteaction发送ajax调用?这个方法一直工作得很好,直到不再有任何实体留下来导致如下错误:ContextErrorException:注意:未定义变量:deleteFormsTrue。我已经编辑了我的答案,添加了数组的初始化。谢谢。我们怎样才能把它添加到生成器中?@AhmetAlsan你在说什么?@DevAntoine我正试图覆盖sensio生成器包。当我运行generatecrud命令时,它应该将delete按钮添加到条目列表页面。
<form action="{{ path('foo_delete', { 'id': entity.id }) }}" method="post">
    <input type="hidden" name="_method" value="DELETE" />
    {{ form_widget(deleteForms[entity.id]) }}
    <button type="submit" class="btn btn-small">
        <i class="icon-trash"></i>
        {{ 'links.admin.form.delete' | trans({}, 'FooBundle') }}
    </button>
</form>