appaydin / pd-menu
Symfony Simple Menu Bundle
3.0.02
2021-05-06 23:32 UTC
Requires
- php: >=8.0.0
- symfony/event-dispatcher: *
- twig/twig: *
README
为Symfony 5提供简单快速的面向对象菜单制作器
安装
步骤 1: 下载包
打开命令行界面,进入您的项目目录并执行以下命令以下载此包的最新稳定版本
composer require appaydin/pd-menu
此命令要求您全局安装了Composer,具体请参阅Composer文档中的安装章节。
步骤 2: 启用包
在Symfony 4中,包将自动启用。但如果出现问题,您可以手动安装。
然后,将包添加到项目的config/bundles.php
文件中注册的包列表中,以启用该包
<?php // config/bundles.php return [ //... Pd\MenuBundle\PdMenuBundle::class => ['all' => true] ];
创建您的第一个菜单
步骤 1: 无服务
您可以在没有服务的情况下创建菜单。您可以使用$options
加载必要的参数
<?php // src/Menu/FirstMenu.php namespace App\Menu; use Pd\MenuBundle\Builder\ItemInterface; use Pd\MenuBundle\Builder\Menu; class FirstMenu extends Menu { /** * Override */ public function createMenu(array $options = []): ItemInterface { // Create Root Item $menu = $this ->createRoot('settings_menu', true) // Create event is "settings_menu.event" ->setChildAttr(['data-parent' => 'admin_account_list']); // Add Parent Menu to Html Tag // Create Menu Items $menu->addChild('nav_config_general', 1) ->setLabel('nav_config_general') ->setRoute('admin_settings_general') ->setLinkAttr(['class' => 'nav-item']) ->setRoles(['ADMIN_SETTINGS_GENERAL']) // Contact ->addChildParent('nav_config_contact', 5) ->setLabel('nav_config_contact') ->setRoute('admin_settings_contact') ->setLinkAttr(['class' => 'nav-item']) ->setRoles(['ADMIN_SETTINGS_CONTACT']) // Email ->addChildParent('nav_config_email', 10) ->setLabel('nav_config_email') ->setRoute('admin_settings_email') ->setLinkAttr(['class' => 'nav-item']) ->setRoles(['ADMIN_SETTINGS_EMAIL']) // Template ->addChildParent('nav_config_template') ->setLabel('nav_config_template') ->setRoute('admin_settings_template') ->setLinkAttr(['class' => 'nav-item']) ->setRoles(['ADMIN_SETTINGS_TEMPLATE']) // Account ->addChildParent('nav_config_user') ->setLabel('nav_config_user') ->setRoute('admin_settings_user') ->setLinkAttr(['class' => 'nav-item']) ->setRoles(['ADMIN_SETTINGS_USER']); return $menu; } }
渲染菜单
创建过程非常简单。您可以指定额外的选项。
{{ pd_menu_render('App\\Menu\\FirstMenu', { 'custom': 'variable or options' }) }}
您可以更改默认选项。
{{ pd_menu_render('App\\Menu\\FirstMenu', { 'template': '@PdMenu/Default/menu.html.twig', 'depth': null, 'currentClass': 'active', 'trans_domain': 'admin', 'iconTemplate' => '<i class="material-icons">itext</i>' }) }}
您可以在全局范围内更改默认选项。
config/packages/pd_menu.yaml pd_menu: template: '@PdMenu/Default/menu.html.twig', depth: null, currentClass: active trans_domain: admin, iconTemplate: '<i class="fa&text"></i>'
创建菜单事件 & 事件监听器
步骤 1: 创建菜单事件
所有菜单的自动事件都会生成。例如:"menu_name.event"。
步骤 2: 创建菜单监听器
现在让我们为该事件创建一个监听器。
<?php // src/Listener/MenuListener.php namespace App\Listener; use Pd\MenuBundle\Event\PdMenuEvent; class MenuListener { public function onCreate(PdMenuEvent $event) { // Get Menu Items $menu = $event->getMenu(); // Add New Item $menu->addChild('demo_item', 5) ->setLabel('Home Page') ->setRoute('home_route'); } }
让我们为监听器创建一个服务。
App\Menu\MenuListener: tags: - { name: kernel.event_listener, event: settings_menu.event, method: onCreate }