将自定义Sonata页面路线添加到导航栏


Add custom Sonata page route to the navbar

我创建了一个自定义的Sonata页面

简单路线

medapp_adminStreamCommands:
    path:     /admin/stream
    defaults: { _controller: MedAppBundle:VideoChat/VideoChat:adminStreamCommands }

返回管理池的控制器

  public function adminStreamCommandsAction(Request $request)
    {
        return $this->render('@MedApp/AdminSonata/Stream/stream_commands.html.twig', array(
            'admin_pool' => $this->get('sonata.admin.pool')));
    }

平面图模板

{% extends '@MedApp/AdminSonata/standard_layout.html.twig' %}
{% block content %}
foobar
{% endblock content 

这很有效,我可以用/admin/foo在我的网站上访问它,我会得到一个页面,其中有Sonata管理模板和我的"foobar"内容。

我的问题是,如何在不修改默认模板的情况下将此路线添加到左侧和顶部导航栏?这是因为左侧菜单由KNP菜单呈现:

{% block side_bar_nav %}
    {% if app.user and is_granted('ROLE_SONATA_ADMIN') %}
        {{ knp_menu_render('sonata_admin_sidebar', {template: admin_pool.getTemplate('knp_menu_template')}) }}
    {% endif %}
{% endblock side_bar_nav %}

我需要以某种方式添加我的新页面,以便通过此菜单进行渲染。

通常,页面是通过服务添加的,但这些页面是建立在实体之上的:

servicename:
     class: Bundle'Class
     arguments: [~, Bundle'Entity'Entityname, ~]
     tags:
         - { name: sonata.admin, manager_type: orm, group: admin, label: CustomName}

不过,我的页面没有使用实体,只是使用静态内容或不依赖于实体的内容。

我已经知道我可以修改生成菜单的块,但我认为最好的方法是将我的类添加为标记为sonata.admin的服务,该服务没有orm manager_type,换句话说,它不是实体。如何做到这一点?

您应该覆盖standard_layout并修改side_bar_nav块的内容。这是一种简单快捷的方法。或者,您可以深入研究sonata代码,以找到如何向admin_pool.dashboardgroups中注入一些东西-玩得开心:)

我认为这是不可能的,你必须创建一个新的布局,复制sonata管理布局并根据你的需要进行自定义。

您可以通过更改sonata_admin的yml配置(templates->layout)或扩展SonataAdmin捆绑包并创建自己的layout.html wig.来更改使用的布局