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

时间:2015-11-17 12:15:25

标签: php symfony sonata-admin symfony-sonata

我已经创建了一个自定义的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,在其他单词,不是实体。怎么办?

2 个答案:

答案 0 :(得分:2)

您应该覆盖standard_layout并修改side_bar_nav块的内容。这是简单快捷的方式。或者你可以深入了解奏鸣曲代码以找到如何将东西注入admin_pool.dashboardgroups - 玩得开心:)

答案 1 :(得分:1)

我认为不可能,你必须创建一个新版面,复制sonata admin layout并根据需要进行自定义。

您可以通过更改sonata_admin(模板 - >布局)或extending the SonataAdmin bundle的yml配置并创建自己的layout.html.twig来更改所使用的布局。