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

Mal*_*lte 4 symfony sonata

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

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

它基本上只是一个像"在前端向我展示这个实体"的链接,因此不需要大的逻辑.

Art*_*iel 5

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

  • app/Resources被调用中创建新目录(如果您还没有)SonataAdminBundle.在里面,创建一个名为views.这将创建一个像这样的路径app/Resources/SonataAdminBundle/views.这是Symfony基本模板覆盖.您可以在此处阅读有关该主题的更多信息

  • 现在,您应该在原始包中复制原始模板,其路径与原始模板相同.我们感兴趣的模板文件位于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中显示该链接取决于您.我将向您展示一种限制特定操作的方法.

您要编辑的块{% 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 %}
Run Code Online (Sandbox Code Playgroud)

现在剩下要做的就是在最后一个<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 %}
Run Code Online (Sandbox Code Playgroud)

admin.id(object)将返回您编辑的项目的当前ID.app.request.get('_route')将返回编辑操作的路径.如果您希望链接显示在所有编辑操作中,则可以删除它.<a href="/generate/path/with/your/route">View in Frontend</a>使用您的路线名称进行更改,您admin.id(object)应该很高兴.