marcel-maqsood / middleware-navigation
中间件导航是一个PSR-15中间件,为Laminas Mezzio应用提供导航功能
Requires
- knplabs/knp-menu: ^3.5
- laminas/laminas-servicemanager: ^3.22
- mezzio/mezzio-router: 3.17
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)。有关更多信息,请参阅许可证文件。