kaishiyoku/laravel-menu

此包已被弃用且不再维护。未建议替代包。

为 Laravel 创建支持 CSS 突出显示的菜单

4.5.2 2020-09-19 11:38 UTC

README

Maintenance Packagist Packagist

具有自动 CSS 突出显示的 Laravel 菜单

目录

版本信息

版本 4 是对包的全面重构。因此引入了破坏性变更。

最低要求

  • PHP >=7.2.5
  • Laravel ^6.0

通用

此包有助于在 Laravel 中定义和渲染菜单结构。主要功能是突出显示活动页面的 CSS。该包与 Laravel 相耦合,不能独立使用。

重要信息

请注意,您的路由必须命名。

安装

Composer

通过运行 composer require "kaishiyoku/laravel-menu": "^4.0""kaishiyoku/laravel-menu": "^4.0" 添加到您的 composer.json

通过运行 composer update 更新您的依赖项。

Laravel 配置

该包支持 Laravel 自动发现,但如果您愿意,可以将 Kaishiyoku\LaravelMenu\ServiceProvider::class, 添加到 providers 数组
并将 'Menu' => Kaishiyoku\LaravelMenu\Facade::class, 添加到 aliases 数组中的 app/config/app.php

使用方法

  • 使用 php artisan make:middleware Menus 生成一个新的中间件
  • \App\Http\Middleware\Menus::class, 添加到 Http Kernel 中的 $middlewareGroups > 'web'
  • 将您的菜单添加到 Menus 中间件的 handle() 方法中

示例 \App\Http\Middleware\Menus.php

<?php

namespace App\Http\Middleware;

use Closure;

class Menus
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // your menus go here

        return $next($request);
    }
}

编辑 \App\Http\Kernel

[...]

protected $middlewareGroups = [
    'web' => [
        // [...]
        \App\Http\Middleware\Menus::class,
    ],
 ];

[...]

要在 Blade 模板中的某个位置显示配置的菜单,必须调用 render 函数

<div id="navbar" class="collapse navbar-collapse">
    {!! \LaravelMenu::render() !!}

    {!! \LaravelMenu::render('navbar-right') !!}
</div>

如果 render() 方法没有参数被调用,将渲染默认菜单。菜单名称必须唯一,否则将抛出异常。

结果将如下所示:Screenshot 1

如果您有任何问题,请随时提交工单。

示例

\LaravelMenu::register()
    ->addClassNames(['mr-auto'])
    ->link('users.index', 'All users')
    ->dropdown('Comments', [
        'comments.index' => 'All',
        'comments.create' => 'Create',
    ]);

您还可以使用条件来决定是否渲染给定的菜单项,例如

\LaravelMenu::register()
    ->linkIf(auth()->check(), 'users.index, 'All users')
    ->dropdownIf(auth()->check(), 'Comments', [
        'comments.index' => 'All',
        'comments.create' => 'Create',
    ]);

对于下拉链接,您可以定义多个路由,以便在访问这些路由之一时,相应的链接将被高亮显示。第一个路由将是链接所指向的路由。

\LaravelMenu::register()
    ->dropdown('Comments', \LaravelMenu::dropdownContainer()
        ->header('General')
        ->link('comments.index,comments.top,comments.show', 'All')
        ->divider()
        ->link('comments.create', 'Create')
);

可用方法

  • addClassNames(string|array $classNames) 将 CSS 类名添加到菜单容器
  • disableXssFilter() 禁用集成的 XSS 过滤器
  • link(string $route, ?string $title = null, bool $strict = false)
    • 您还可以使用逗号分隔的 $route 列表(例如:entries.index,entries.create,entries.create
  • dropdown(string $title, DropdownContainer $dropdownContainer)
    • DropdownContainer 类具有以下可用方法
    • link(string $route, ?string $title = null)
    • header(string $title)
    • divider()
  • text(string $text)
  • content(string $content)

➡ 每个容器方法都可以带有一个条件。只有当这个条件为真时,容器才会被渲染。(例如:linkIf(bool $condition, string $route, ?string $title = null, bool $strict = false)

MenuContainer: linkIf, dropdownIf, textIf, contentIf

DropdownContainer: linkIf, headerIf, dividerIf

外观和感觉

当前默认的外观和感觉基于 Bootstrap 4。

您可以通过发布它们来自定义每个 Blade 组件(php artisan vendor:publish --provider="Kaishiyoku\LaravelMenu\ServiceProvider"

许可证

MIT (https://github.com/Kaishiyoku/laravel-menu/blob/master/LICENSE)

作者

Twitter: @kaishiyoku
网站: https://andreas-wiedel.de