我已经按照本教程了解如何向我的实体添加自定义操作。
https://sonata-project.org/bundles/admin/3-x/doc/cookbook/recipe_custom_action.html
它完美无缺。
但是现在我想在该动作上添加一个确认模式,这样你就不能只执行它,而是先确认一下你是否确定要这样做。
我所做的只是让链接成为数据切换并删除实际的操作路线。为模态添加一个bootstrap div类,并在其中添加一个与该路径的链接。但现在发生的是第一个实体的id分别用于所有实体而不是它们的ID。
我改变了这个:
{% if admin.isGranted('EDIT', object) and admin.hasRoute('delOnt') %}
<a href="{{ admin.generateObjectUrl('delOnt', object) }}"
class="btn btn-sm btn-default edit_link">
<i class="fa fa-trash" aria-hidden="true"></i>
{{ 'action_del_ont' | trans({}, "QiOpticksBundle") }}
</a>
{% endif %}
到此:
{% if admin.isGranted('EDIT', object) and admin.hasRoute('delOnt') %}
<a href="#"
class="btn btn-sm btn-default edit_link"
data-toggle="modal"
data-target="#deleteModal">
<i class="fa fa-trash" aria-hidden="true"></i>
{{ 'action_del_ont' | trans({}, "QiOpticksBundle") }}
</a>
<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Delete ONT</h4>
</div>
<div class="modal-body">
Are you sure you want to delete this ONT?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">
{{ 'no' | trans({}, "QiOpticksBundle") }}
</button>
<a href="{{ admin.generateObjectUrl('delOnt', object) }}"
class="btn btn-danger"
title="{{ 'action_del_ont'|trans({}, 'QiOpticksBundle') }}">
{{ 'action_del_ont' | trans({}, "QiOpticksBundle") }}
</a>
</div>
</div>
</div>
</div>
{% endif %}
现在所有实体的动作都使用第一个实体的id,而不是他们自己的id。
我尝试将{{ admin.generateObjectUrl('delOnt', object) }}
替换为实际的根名称,例如{{ path('admin_qi_opticks_tl1ont_delOnt', {'id': object.id}) }}
,但它会导致同样的问题。有没有办法克服这个问题?
答案 0 :(得分:0)
我解决了这个问题。这是一个小小的愚蠢错误。
所有按钮的所有模态都是正确的。模态内的路线也是正确的。问题是所有链接都打开了相同的 - 第一个 - 模态,因为链接中的所有id都指向相同的模态打开。
在每个链接中,data-target
应该是唯一的,以打开其唯一模式,因此我将data-target
的值更改为"#deleteModal-{{ object.id }}"
。现在每个链接都会查找正确的模态。然后你对每个模态的id做同样的事情。 id="deleteModal-{{ object.id }}"
。
因此我的代码如下所示:
{% if admin.isGranted('EDIT', object) and admin.hasRoute('delOnt') %}
<a href="#"
class="btn btn-sm btn-default edit_link"
data-toggle="modal"
data-target="#deleteModal-{{ object.id }}">
<i class="fa fa-trash" aria-hidden="true"></i>
{{ 'action_del_ont' | trans({}, "QiOpticksBundle") }}
</a>
<div class="modal fade" id="deleteModal-{{ object.id }}" tabindex="-1" role="dialog" aria-labelledby="deleteLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Delete ONT</h4>
</div>
<div class="modal-body">
Are you sure you want to delete this ONT?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">
{{ 'no' | trans({}, "QiOpticksBundle") }}
</button>
<a href="{{ admin.generateObjectUrl('delOnt', object) }}"
class="btn btn-danger"
title="{{ 'action_del_ont'|trans({}, 'QiOpticksBundle') }}">
{{ 'action_del_ont' | trans({}, "QiOpticksBundle") }}
</a>
</div>
</div>
</div>
</div>
{% endif %}