将自定义奏鸣曲页面路由添加到导航栏
Posted
技术标签:
【中文标题】将自定义奏鸣曲页面路由添加到导航栏【英文标题】:Add custom Sonata page route to the navbar 【发布时间】:2016-02-18 19:24:41 【问题描述】:我创建了一个自定义奏鸣曲页面
简单路线
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
访问它,我会得到一个页面,其中包含带有我的“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
不过,我的页面没有使用实体,只是静态内容或不依赖于实体的内容。
我已经知道我可以修改生成菜单的块,但我认为最好的方法是将我的类添加为标记为没有 orm manager_type 的 sonata.admin 的服务,在其他话,不是实体。怎么可能?
【问题讨论】:
【参考方案1】:我认为这是不可能的,您必须创建一个新布局,复制 sonata admin layout 并根据您的需要对其进行自定义。
您可以通过更改 sonata_admin(模板 -> 布局)或 extending the SonataAdmin bundle 的 yml 配置并创建自己的 layout.html.twig 来更改使用的布局。
【讨论】:
我已经这样做了。但是,我需要根据管理池路由和我自己的自定义页面生成菜单。我在想奏鸣曲有办法通过 yml 文件或其他更简单的方法来完成,而不是让我创建自己的菜单。我想我不是第一个想要类似功能的人,但我找不到任何这样做的例子。 不知道除了创建自己的菜单是否还有其他方法,您还可以通过检查页面的当前路径并添加自己的html来设置自己的链接,这是一种肮脏的方式它但会工作。 确实如此。另一种方法是为模型设置一个管理类,该模型不是与 ORM 绑定的实体。我已经看到过关于这种方式的讨论,但同样,找不到任何关于如何做到这一点的例子。这肯定会起作用,因为我可以将路由添加到当前模型的 routecollection 并实现自定义操作。不幸的是,我找不到任何关于它的东西,或者如果它甚至可能的话。【参考方案2】:您应该覆盖 standard_layout 并修改 side_bar_nav 块的内容。这是一种简单快捷的方法。或者您可以深入研究奏鸣曲代码以找到如何将一些东西注入admin_pool.dashboardgroups
- 玩得开心:)
【讨论】:
我知道,这就是另一个答案所说的。我一直在寻找使用与 ORM 无关的实体的方法。这样我就可以为管理面板定义我自己的自定义数据,但菜单仍然会包含它,因为它将是一个带有 sonata.admin 标签的服务。以上是关于将自定义奏鸣曲页面路由添加到导航栏的主要内容,如果未能解决你的问题,请参考以下文章