表单 – 如何使用实体列表(CRUD)从模板中删除实体?

栏目: PHP · 发布时间: 5年前

内容简介:翻译自:https://stackoverflow.com/questions/18432599/how-to-delete-an-entity-from-a-template-with-a-list-of-entities-crud

说明:

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

> indexAction():列出所有实体.

> showAction($id):查找(按ID)并显示实体.

> deleteAction($id):删除实体.

>另一个行动.

所以,我已经看到我只能删除使用param $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中,添加以下循环,不要忘记将参数传递给视图.

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,
    );
}

Basicaly我只是循环遍历所有实体并使用crud生成的内置方法创建相应的删除表单,将每个表单存储在一个数组中并将其传递给视图.

然后在视图中,只需添加edit.html.twig生成的视图中已有的表单,然后编辑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>

翻译自:https://stackoverflow.com/questions/18432599/how-to-delete-an-entity-from-a-template-with-a-list-of-entities-crud


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ext JS源码分析与开发实例宝典

Ext JS源码分析与开发实例宝典

彭仁夔 / 电子工业出版社 / 2010-1 / 78.00元

《Ext JS源码分析与开发实例宝典》从Ext JS实现的基本功能开始讲解,从两个方面对Ext JS进行整体上的概述,让读者从宏观上去把握ExtJS框架。接下来讲解Ext JS核心基础知识,包括事件机制、模板模型、数据模型以及对类、函数、字符串、日期、数组及定时任务这6个类进行扩展。然后讲解Ext JS基于元素的开发,包括动画特效和拖曳实现等。最后深入讲解组件的开发,对布局、模型及4大组件一一进行......一起来看看 《Ext JS源码分析与开发实例宝典》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器