gpt4 book ai didi

forms - 如何从带有实体列表 (CRUD) 的模板中删除实体?

转载 作者:行者123 更新时间:2023-12-04 09:15:11 25 4
gpt4 key购买 nike

说明:

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

  • indexAction(): 列出所有实体。
  • showAction($id): 查找(按 ID)并显示一个实体。
  • deleteAction($id): 删除一个实体。
  • 另一个 Action 。

  • 所以,我已经看到我只能删除使用参数 $id 的操作中的实体(例如: showAction($id) )但是 我想删除 indexAction 模板中的一个实体,因为我向用户保存了一个步骤。

    deleteAction 需要一个请求、一个 ID 并使用 POST 方法。

    我试图编写类似的代码:
    <a href="{{ path('entity_delete', { 'id': entity.id }) }}" class="btn">
    <img src="{{ asset('bundles/acme/images/delete.png') }}" ... />
    </a>

    当我执行该操作时,出现以下错误:

    No route found for "GET /acme/something/4/delete": Method Not Allowed (Allow: POST, DELETE)



    这个回复很清楚,这正是我所期望的,所以我尝试做一些类似的事情,但使用了一个表格。像这样的东西:
    <form id="formDelete" action="{{ path('entity_delete', { 'id': entity.id }) }}" method="post">
    <input type="hidden" name="_method" value="DELETE" />
    {{ form_widget(delete_form) }}
    <a href="{{ url('entity_delete') }}" class="btn" onclick="document.getElementById('formDelete').submit();">
    <img src="{{ asset('bundles/acme/images/delete.png') }}" ... />
    </a>
    </form>

    但行 {{ form_widget(delete_form) }}是一个问题,因为 indexAction()没有任何参数,它需要以下代码:
    $deleteForm = $this->createDeleteForm($id);
    return $this->render('AcmeBundle:Demo:index.html.twig', array(
    'entities' => $entities,
    'delete_form' => $deleteForm->createView(),
    ));

    如您所见,$id 参数对于方法 createDeleteForm($id) 是必需的。但我无法从 indexAction() 得到它.

    问题:

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

    最佳答案

    如果您只想拥有与索引中的项目一样多的删除按钮,这里是如何轻松做到的。

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

    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 生成的内置方法创建相应的删除表单,将每个表单存储在一个数组中并将其传递给 View 。

    然后在 View 中,只需添加edit.html.twig生成 View 中已经可用的表单并编辑form_widget的参数:
    <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>

    关于forms - 如何从带有实体列表 (CRUD) 的模板中删除实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18432599/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com