在自定义操作上添加确认模式

时间:2017-04-25 11:29:09

标签: php twitter-bootstrap symfony twig sonata-admin

我已经按照本教程了解如何向我的实体添加自定义操作。

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">&times;</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}) }},但它会导致同样的问题。有没有办法克服这个问题?

1 个答案:

答案 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">&times;</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 %}