marcel-maqsood/middleware-navigation

中间件导航是一个PSR-15中间件,为Laminas Mezzio应用提供导航功能

v0.2.8 2024-07-10 10:48 UTC

This package is auto-updated.

Last update: 2024-09-17 11:58:03 UTC


README

安装

运行以下命令安装此库

$ composer require marcel-maqsood/middleware-navigation

文档

安装模块后,您必须将导航中间件实现到您的管道中,因此您基本上需要在RouteMiddleware之前添加此行

     $app->pipe(MazeDEV\NavigationMiddleware\Middleware\NavigationMiddleware::class);

要创建导航,请使用config文件夹中的navigation.global.php(将其放入config\autoload)作为基本配置

菜单项的基本结构必须如下所示

'{navigation_Name}' => [
    'route' => '{route_name}', //route-name which is set in routes.php
]

如果您想向菜单项添加属性(到ul元素),请这样做

'{navigation_Name}' => [
    'attributes' => [...], //possibilities in attributes-table described (at the bottom of the doc)
]

您也可以通过以下方式在列表项前添加一个漂亮的小图标

'{navigation_Name}' => [
    'display' => 'fas fa-home nav-icon' // Would display a home icon infront of your link
]

如果您想向菜单项添加链接属性(到a元素),请这样做

'{navigation_Name}' => [
    'linkAttributes' => [...], //possibilities in link-attributes-table described (at the bottom of the doc)
]

如果您想向菜单项添加子项,请这样做(您可以添加任意多个)

'{navigation_Name}' => [
    'childs' => [...], //build the same as a normal menu-item
]

如果您想强制链接方向到某个项,请添加以下内容

'{navigation_Name}' => [
    'uri' => '{https://www.technikhafen.de}',
]

包含以下任何示例的菜单项可能看起来像这样

'{navigation_Name}' => [
    'display' => 'fas fa-home nav-icon'
    'route' => '{route_name}',
    'permission' => 'somePermission',
    'uri' => '{https://www.technikhafen.de}',
    'attributes' => [
        'id' => '{some_id}',
        'class' => ['{class1} {class2}'],
    ],
    'linkAttributes' => [
        'id' => '{some_id}',
        'class' => '{class_1} {class2}',
    ],
    'childs' => [
        '{childNavigation_Name}' => [
            'display' => 'fas fa-home nav-icon'
            'route' => '{route_name}',
            'permission' => 'somePermission2',
            'uri' => '{https://www.technikhafen.de}',
            'attributes' => [],
            'linkAttributes' => [],
            'childs' => [],
        ]
    ]
]

上述示例将输出以下HTML

<ul>
    <li id="{some_id} class="{class1 class2} first last">
        <a href="{https://www.technikhafen.de}">{navigationName}</a>
        <ul class="menu_level_1">
            <li class="first last">
                <a href="{https://www.technikhafen.de}">{childNavigationName}</a>
            </li>
        </ul>
    </li>
</ul>

这将看起来像这样

  • {navigationName}
    • {childNavigationName}

请注意,您必须在管道中添加我们的Middleware:NavigationMiddleware,以便始终能够使用渲染的菜单

如果您想在您的管道中添加我们的Middleware,则必须在包含在每个基础管道中的Mezzio\Helper\UrlHelperMiddleware之后包含我们的SessionAuthMiddleware AFTER

$app->pipe(UrlHelperMiddleware::class);
$app->pipe(NavigationMiddleware::class);

如果您想使用我们的MazeDEV\SessionAuth\SessinAuthMiddleware在NavigationMiddleware中进行权限处理,则需要在我们SessionAuthMiddleware AFTER 之后包含我们的NavigationMiddleware

$app->pipe(UrlHelperMiddleware::class);
$app->pipe(SessionAuthMiddleware::class);
$app->pipe(NavigationMiddleware::class);

这是您可以在全局范围内结合使用这些中间件的唯一方法。

然而,您也可以在您的路由中包含中间件

$app->route('/user[/]',
        [
            MazeDEV\SessionAuth\SessionAuthMiddleware::class,
            MazeDEV\NavigationMiddleware\Middleware\NavigationMiddleware::class,
            MazeDEV\SessionAuth\LoginHandler\GlobalLoginHandler::class
        ],
        [
            'GET',
            'POST'
        ],
        'userLogin'
    );

但如上所述,将其添加到您的管道中要容易得多,并且可维护性更好。

基于权限的导航

我们的NavigationMiddleware能够渲染用户具有权限的导航元素。这是通过包括我们的SessionAuthMiddleware来实现的。如果存在SAM,NavigationMiddleware将仅检查权限,否则将渲染您提供的每个元素。您可以使用每个对象的"route"参数作为它们的权限(始终)或检查另一个定义在"permission"条目中的权限。

您可以使用的属性及其功能


您可以使用的链接属性及其功能

我们没有列出每个链接/属性,请参阅knpLabs/KnpMenu获取更多信息!

致谢

本软件由MazeDEV/Marcel-Maqsood开发(https://github.com/marcel-maqsood/)。

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件