zerkalica / millwright-menu-bundle
为 knp menu bundle 提供配置抽象
Requires
This package is not auto-updated.
Last update: 2024-09-22 07:21:19 UTC
README
MillwrightMenuBundle 扩展了 KnpMenuBundle 的基本功能,并添加了配置、路由、翻译和安全上下文支持。网站上每个链接都是配置菜单容器的组成部分,支持翻译、基于角色的和基于 acl 的安全以及路由参数。
基本文档
功能
-
它使用
JMSSecurityExtraBundle
注解来配置菜单项的可见性:基于角色和基于 acl 的安全上下文支持 -
菜单选项由两部分组成
items
描述每个菜单项:标签、路由|uri、翻译、角色tree
描述每个菜单容器作为菜单项的层次结构
-
items
可以从配置文件以及控制器类和操作中的注解进行配置 -
我们可以在容器中任意调整配置的菜单项
-
菜单 twig 辅助函数支持路由参数,可以根据 acl 需求动态更改菜单项的可见性
-
菜单选项从多个来源合并:配置文件中的
tree
部分、item
部分、操作方法中的@Menu
注解、控制器类中的@Menu
注解
安装
步骤 1) Composer
通过 composer 需求此软件包
composer require zerkalica/millwright-menu-bundle dev-master
步骤 2) 注册软件包
要开始使用此软件包,请在 Kernel 中注册它
<?php // app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Knp\Bundle\MenuBundle\KnpMenuBundle(), new Millwright\MenuBundle\MillwrightMenuBundle(), new Millwright\ConfigurationBundle\MillwrightConfigurationBundle(), ); // ... )
步骤 3) 配置 knp 软件包
# app/config/config.yml imports: - { resource: menu.yml } ... knp_menu: twig: # use "twig: false" to disable the Twig extension and the TwigRenderer template: MillwrightMenuBundle:Default:knp_menu.html.twig templating: false # if true, enables the helper for PHP templates default_renderer: twig # The renderer to use, list is also available by default
创建菜单
任何软件包都可以通过 millwright_menu.menu_options
标记的服务提供自己的菜单或修改现有菜单
<service id="millwright_menu.options" class="%millwright_configuration.options.class%"> <tag name="millwright_menu.menu_options" order="100"/> <argument type="collection"> <argument key="items">%millwright_menu.items%</argument> <argument key="tree">%millwright_menu.tree%</argument> <argument key="renderers">%millwright_menu.renderers%</argument> </argument> </service>
order
属性 - 提供的菜单的顺序。第一个参数是菜单选项的集合。默认情况下,提供了一个由 MillwrightMenuBundle 提供,并在应用程序配置的 millwright_menu
部分中配置的菜单。
# app/config/menu.yml millwright_menu: renderers: navigation: #menu type id renderer: null # custom renderer rendererOptions: template: MillwrightMenuBundle:Default:knp_menu.html.twig items: #menu items homepage: #menu name, used for route name, if it not set in options translateDomain: 'MillwrightMenuBundle' roles: IS_AUTHENTICATED_ANONYMOUSLY fos_user_registration_register: translateDomain: 'MillwrightMenuBundle' roles: ROLE_USER fos_user_profile_show: translateDomain: 'MillwrightMenuBundle' showNonAuthorized: true #show link in menu for non-authorized user roles: ROLE_USER fos_user_change_password: translateDomain: 'FOSUserBundle' roles: ROLE_USER label: 'change_password.submit' test: translateDomain: 'FOSUserBundle' label: 'change_password.submit' uri: 'http://www.google.com' tree: #menu containers user_admin: #user administration links container type: navigation # menu type id children: fos_user_profile_show: ~ fos_user_change_password: ~ main: #main container type: navigation # menu type id children: homepage: ~ test: ~ fos_user_registration_register: ~ fos_user_profile_show: children: fos_user_change_password: ~
使用注解
可以配置注解中的项目部分
# src/Application/Millwright/CoreBundle/Controller/DefaultController.php ... /** * @Menu(translateDomain="MillwrightMenuBundle") */ class DefaultController extends Controller { /** * @Route("/user/{user}", name="showUser") * @Template() * @Secure(roles="ROLE_ADMIN") * @SecureParam(name="user", permissions="EDIT") * @Menu(showNonAuthorized=true, label="User edit") */ public function userAction(User $user) { return array('content' => 'hello'); } }
在模板中使用菜单
millwright_menu_render
支持额外的路由参数,其他选项与 knp_menu_render 相同。
{{ millwright_menu_render('main', routeParams, options, renderer) }}
简单用法
{{ millwright_menu_render('main') }}
高级
我们有一个用户集合,每个用户都有 acl 权限
{% for user in users %} {{ millwright_menu_render('main', {user: user.id}) }} {% endfor %}
菜单项选项
# app/config/menu.yml millwright_menu: renderers: <menu type>: renderer: null # custom renderer rendererOptions: ... items: <key>: <item options> ... tree: <menu_name>: type: <menu type> children: <items hierarchy>
项目部分
<key>
- 用作名称、路由和标签的默认值uri
- 如果未设置路由参数的 uri 字符串label
- 标签文本或翻译字符串模板name
- 菜单项名称,用作路由的默认值attributes
- knp 菜单项选项linkAttributes
- knp 菜单项选项childrenAttributes
- knp 菜单项选项labelAttributes
- knp 菜单项选项display
- knp 菜单项选项displayChildren
- knp 菜单项选项translateDomain
- 翻译域translateParameters
- 翻译参数secureParams
- 复制@SecureParam
JMSSecurityExtraBundle
注解roles
- 复制@Secure
JMSSecurityExtraBundle
注解route
- 生成 uri 的路由名称,如果未设置且未设置 uri,则从键中加载routeAbsolute
- 生成绝对 urlshowNonAuthorized
- 对非授权用户显示showAsText
- 如果授权且无法访问项目,则将项目以文本形式显示icon
- 菜单项的图标类
tree
部分
type
- 菜单容器类型children
- 子菜单项
renderers
部分
<menu type>
- 菜单容器类型renderer
- 自定义渲染器rendererOptions
- 传递给菜单渲染器的选项:模板等
注解选项
@Menu
注解支持:标签、翻译域、翻译参数、名称、显示非授权、显示为文本选项。
示例
//@todo 沙盒
# src/Application/Millwright/CoreBundle/Controller/ArticleController.php ... /** * @Menu(translateDomain="MillwrightMenuBundle") */ class ArticleController extends Controller { /** * @Route("/articles", name="article_index") * @Template() * @Secure(roles="ROLE_USER") */ public function indexAction() { // } /** * @Route("/article/create", name="article_create") * @Template() * @Secure(roles="ROLE_USER") * @SecureParam(name="article", permissions="EDIT") */ public function createAction() { // } /** * @Route("/article/{article}", name="article_view") * @Secure(roles="ROLE_USER") * @SecureParam(name="article", permissions="VIEW") * @Template() */ public function viewAction(Article $article) { return array('article' => $article); } /** * @Route("/article/{article}/edit", name="article_edit") * @Template() * @Secure(roles="ROLE_USER") * @SecureParam(name="article", permissions="EDIT") */ public function editAction(Article $article) { // } /** * @Route("/article/{article}/delete", name="article_delete") * @Template() * @Secure(roles="ROLE_USER") * @SecureParam(name="article", permissions="DELETE") */ public function deleteAction(Article $article) { // } }
菜单文件
# app/config/menu.yml millwright_menu: tree: article_index_actions: type: menu children: article_create: ~ article_actions: type: actions children: article_view: ~ article_edit: ~ article_delete: ~