我已经创建了一个自定义的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,在其他单词,不是实体。怎么办?
答案 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来更改所使用的布局。