laravel5.5 lavary/laravel-menu生成bootstrap菜单

      • 场景
      • package介绍
      • 安装 && 使用
      • 实列

场景

  • 每个网站都遇到菜单得控制
  • 环境 laravel5.5

package介绍

  • [lavary/laravel-menu](‘https://github.com/lavary/laravel-menu‘) 可以自动得生成bootstrap格式多级菜单, 而且操作很简单

安装 && 使用

安装

composer require lavary/laravel-menu

使用

具体使用见github文档;

注册数据:

// 很方便得注册数据
$menu->add('About', ['url' => 'about', 'id' => 12]);
$about = $menu->find(12)
$about->add('about_sub', ['url' => 'about_sub', 'id' => 13]);

html调用

@include(config('laravel-menu.views.bootstrap-items'), ['items' => Menu::get('NavPermission')->roots()])

实列



namespace App\Http\Middleware;

use Closure;
use Ultraware\Roles\Models\Permission;

class GenerateMenus
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mix
     */
    public function handle($request, Closure $next)
    {
        // 全量的权限
        $list_permissions = $this->getLoginPermission();

        // 权限导航
        \Menu::makeOnce('NavPermission', function($menu) use ($list_permissions){
            array_walk($list_permissions, function($item) use ($menu){
                // 设置menu
               $this->setMenuItem($item, $menu);
            });
        });

        return $next($request);
    }

    /**
     * 获取登陆用户的权限列表
     * @return array
     */
    protected function getLoginPermission()
    {
        $list_permissions = $this->getPermissionList();

        // 过滤掉不属于登陆用户的权限
        return $this->filterPermissionWhichNotLogin($list_permissions);
    }

    /**
     * 过滤掉不输入登陆用户的权限
     * @param array $list_source_permissions 全量权限
     * @return array
     */
    protected function filterPermissionWhichNotLogin($list_source_permissions)
    {
        $list_permissions = [];
        array_walk($list_source_permissions, function ($item) use (&$list_permissions){
            // 登陆用户是否拥有某个权限
            $has_permission = $this->loginHasPermission($item);
            if (!$has_permission) {
                return true;
            }
            array_push($list_permissions, $item);
        });

        return $list_permissions;
    }

    /**
     * 登陆用户是否拥有某个权限
     * @param array $permission
     * @return boolean
     */
    protected function loginHasPermission($permission)
    {
        // 如果用户没有登陆 则只是展示首页
        if (!\Auth::check()) {
            return $permission['name'] === '首页';
        }

        return  \Auth::user()->hasPermission($permission);
    }

    /**
     * 设置menu
     * @param array  $item 权限节点
     * @param object $menu
     */
    protected function setMenuItem($item, $menu)
    {
        // 如果
        switch ($item['parent_id']) {
            case 0:
                // 一级菜单
                $menu->add($item['name'], ['route' => $item['slug'], 'id' => $item['id']]);
                break;
            default:
                // 其他
                $node_parent = $menu->find($item['parent_id']);
                $node_parent->add($item['name'], ['route' => $item['slug'], 'id' => $item['id']]);
        }
    }

    /**
     * 全量的权限
     * @return array
     */
    protected function getPermissionList()
    {
        $where  = ['is_show' => 'T'];
        $list_permissions = Permission::where($where)->get();
        return array_column($list_permissions->toArray(), null, 'id');
    }
}

你可能感兴趣的:(laravel)