adel/laravel-menu

Laravel 的菜单组件

v0.2.1 2018-07-16 01:30 UTC

This package is not auto-updated.

Last update: 2024-09-23 15:45:27 UTC


README

Latest Version on Packagist Software License Scrutinizer

这是一个简单的Laravel菜单创建组件。它不使用控制器或创建庞大的blade模板,只需一个配置文件。

示例 (resources/menu/default.php)

<?php

return [
    //'template' => 'menu.menu', // custom blade template can be provided here

    'items' => [
        [
            'name' => 'Home',
            'link' => route('dashboard'),
            'active' => activeMenuController(\App\Http\Controllers\DashboardController::class),
            'icon' => 'home',
        ],
        [
            'name' => 'Users',
            'auth' => authMenuCan('manageUsers'), // Will be shown if user "can" 'manageUsers'.
            // Gate::check('manageUsers') will be checked
            'link' => '/users',
            'active' => activeMenuUrlPrefix('users'), // Will be active for all '/users*' URL's
            'icon' => 'user',
        ],
        [
            'name' => trans('complex.auth'),
            'auth' => function (){
                return Gate::check('one') || Gate::check('two');
            },
            'link' => '/complex-auth',
            'active' => activeMenuUrlPrefix('complex-auth'),
            'icon' => 'complex',
        ],
        [
            'name' => 'Group',
            'icon' => 'group',
            'items' => [
                [
                    'name' => 'Orders',
                    'link' => '/orders', // route('orders'),
                    'active' => activeMenuController(\App\Http\Controllers\OrdersController::class),
                    'icon' => 'orders',
                ],
                [
                    'name' => 'Bar',
                    'link' => '/bar', // route('bar'),
                    'active' => activeMenuController(\App\Http\Controllers\BarController::class),
                    'icon' => 'bar',
                ],
            ],
        ],
    ],
];

单级菜单的blade模板可以非常简单

<!-- Example of menu template with Bootstrap and FontAwesome icons-->
<nav class="navbar navbar-default">
    <ul class="nav navbar-nav">
        @foreach($items as $item)
            <li @if($item['active']) class="active" @endif>
                <a href="{{$item['link']}}" title="{{$item['name']}}">
                    <i class="fa fa-{{$item['icon']}}"></i> {{$item['name']}}
                </a>
            </li>
        @endforeach
    </ul>
</nav>

对于双级菜单,会更加复杂。本包提供示例。

安装

首先,使用composer安装包

composer require adel/laravel-menu

对于Laravel < 5.5,请查看Laravel < 5.5 安装部分。

然后发布一些初始配置和blade模板

php artisan vendor:publish --provider="Adelf\LaravelMenu\LaravelMenuServiceProvider"

resources/menu/default.phpresources/views/menu/menu.blade.php 文件将出现。这只是示例。请提供您自己的配置和blade模板。

使用

这将渲染菜单的blade模板

<header>
    {!! LaravelMenu::render() !!}
</header>

可以使用激活项目的标题作为标题

<title>
    {{array_get(LaravelMenu::getLastActiveItem(), 'name', 'Default title')}}
</title>

多个菜单

另一个菜单可以通过在 resources/menu 目录下定义新文件来创建。例如,resources/menu/admin.php

<title> 
    {!! array_get(LaravelMenu::getLastActiveItem('admin'), 'name', 'Default title') !!}
</title>
<header>
    {!! LaravelMenu::render('admin') !!}
</header>

Laravel < 5.5 安装

服务提供者和外观应该注册在 config/app.php

'providers' => [
    ...
    
    Adelf\LaravelMenu\LaravelMenuServiceProvider::class,
],
'aliases' => [
    ...,

    'LaravelMenu' => Adelf\LaravelMenu\Facade::class,
],