gpt4 book ai didi

symfony - 将自己的操作添加到 SonataAdminBundle 下拉菜单

转载 作者:行者123 更新时间:2023-12-04 22:59:16 24 4
gpt4 key购买 nike

我们在 Symfony2 应用程序中使用 SonataAdminBundle。编辑实体时,我想将自己的操作添加到位于右上角的下拉菜单中,但我不知道这是如何工作的。

我知道我可以通过 configureRoutes(RouteCollection $collection) 添加自己的路线以及如何在 ListView 中的实体后面添加批处理操作或添加自己的操作,但是如何在编辑 View 的操作下拉列表中添加自己的链接?

它基本上只是一个类似于“在前端向我展示这个实体”的链接,所以不需要大的逻辑。

最佳答案

一种方法是覆盖编辑时使用的模板。现在,您需要做的是:

  • app/Resources 中创建新目录(如果您还没有)叫 SonataAdminBundle .在里面,创建另一个名为 views .这将创建一个类似 app/Resources/SonataAdminBundle/views 的路径.这是 Symfony 基本模板覆盖。您可以阅读有关该主题的更多信息 here.
  • 现在,您应该按照原样的路径在原始包中复制原始模板。我们感兴趣的模板文件位于sonata-project/admin-bundle/Resources/views/CRUD/base_edit.html.twig .这意味着您必须在 views 中创建另一个文件夹。 (我们刚刚在 app 中创建的,名为 CRUD 。所以,现在我们必须遵循路径 app/Resources/SonataAdminBundle/views/CRUD 。将模板( base_edit.html.twig )粘贴在里面,我们可以开始编辑。

  • 请记住,在您拥有的每个编辑操作中都使用以下模板。因此,是否要在每个 edit_action 中显示该链接取决于您。我将向您展示 1 种限制特定操作的方法。

    您要编辑的区块是 {% block actions %}它负责呈现下拉列表。这是它现在的样子:
    {% block actions %}
    <li>{% include 'SonataAdminBundle:Button:show_button.html.twig' %}</li>
    <li>{% include 'SonataAdminBundle:Button:history_button.html.twig' %}</li>
    <li>{% include 'SonataAdminBundle:Button:acl_button.html.twig' %}</li>
    <li>{% include 'SonataAdminBundle:Button:list_button.html.twig' %}</li>
    <li>{% include 'SonataAdminBundle:Button:create_button.html.twig' %}</li>
    {% endblock %}

    现在剩下要做的就是在最后一个 <li> 之后插入您的链接标签。
    {% if admin.id(object) is not null and app.request.get('_route') == 'my_route' %}
    <li>
    <a href="/generate/path/with/your/route">View in Frontend</a>
    </li>
    {% endif %}
    admin.id(object)将返回您编辑的项目的当前 ID。 app.request.get('_route')将返回您的编辑操作的路线。如果您希望您的链接显示在所有编辑操作中,您可以删除它。更改 <a href="/generate/path/with/your/route">View in Frontend</a>使用您的路线名称 admin.id(object)你应该很高兴去。

    关于symfony - 将自己的操作添加到 SonataAdminBundle 下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909154/

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