我创建了一个自定义的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: BundleClass
arguments: [~, BundleEntityEntityname, ~]
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.来更改使用的布局