lui*_*e89 7 forms crud symfony symfony-2.3
我已经生成了一个实体的CRUD,获得了以下默认操作:
所以,我已经看到我只能删除使用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>
Run Code Online (Sandbox Code Playgroud)
当我执行该操作时,我收到以下错误:
找不到"GET/acme/something/4/delete"的路由:方法不允许(允许: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>
Run Code Online (Sandbox Code Playgroud)
但该行{{ form_widget(delete_form) }}是一个问题,因为indexAction()它没有任何参数,它需要这个代码:
$deleteForm = $this->createDeleteForm($id);
return $this->render('AcmeBundle:Demo:index.html.twig', array(
'entities' => $entities,
'delete_form' => $deleteForm->createView(),
));
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,$ id参数对于方法是必需的,createDeleteForm($id)但我无法从中获取indexAction().
解决这个问题的最佳方法是什么?
Dev*_*ine 24
如果您只想在索引中拥有尽可能多的删除按钮,那么就可以轻松完成.
在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,
);
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7805 次 |
| 最近记录: |