appaydin/pd-menu

Symfony Simple Menu Bundle

安装次数: 3,238

依赖项: 1

建议者: 0

安全性: 0

星星: 15

关注者: 3

分支: 3

开放问题: 1

类型:symfony-bundle

3.0.02 2021-05-06 23:32 UTC

README

为Symfony 5提供简单快速的面向对象菜单制作器

Packagist Github Release license PHP from Packagist

安装

步骤 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 }