Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 5.1中显示菜单的最佳方式是什么?_Php_Laravel_Blade_Laravel 5.1_Middleware - Fatal编程技术网

Php 在Laravel 5.1中显示菜单的最佳方式是什么?

Php 在Laravel 5.1中显示菜单的最佳方式是什么?,php,laravel,blade,laravel-5.1,middleware,Php,Laravel,Blade,Laravel 5.1,Middleware,我想问一下,哪种方式是显示带有访问参数的菜单的最佳方式 因此,现在我在我的default.blade.php中使用以下代码: @if (Sentry::getUser()->hasAccess('something')) <li class="{{ (Request::is('panda/something') ? 'open' : '') }}"> <a href="{{ URL::to('panda/flot_charts') }}" clas

我想问一下,哪种方式是显示带有访问参数的菜单的最佳方式

因此,现在我在我的
default.blade.php
中使用以下代码:

@if (Sentry::getUser()->hasAccess('something'))
    <li class="{{ (Request::is('panda/something') ? 'open' : '') }}">
        <a href="{{ URL::to('panda/flot_charts') }}" class="menu-dropdown">
             <span class="menu-text">Menu 1</span><i class="menu-expand"></i>
        </a>
        <ul class="submenu">
        @if (Sentry::getUser()->hasAccess('school'))
            <li class="{{ (Request::is('panda/school') ? "active" : '') }}">
                 <a href="{{ route('school') }}"><i class="menu-icon fa fa-cogs"></i><span class="menu-text">Submenu</span></a>
            </li>
        @endif
        </ul>
    </li>
@endif
@if(Sentry::getUser()->hasAccess('something'))
    • @if(Sentry::getUser()->hasAccess('school'))
    • @恩迪夫
  • @恩迪夫
    它看起来像:

    我知道这个解决方案不是很好。我正在寻找一种更简单的方式来显示菜单

    我总是要检查访问者看到的页面,并且相同的菜单必须处于活动状态

    现在我正在使用,但我希望将来使用

    是否将菜单参数存储在
    db

    谢谢你的帮助


    Peter

    我使用的是
    Sentinel
    ,它是
    Sentry
    的更新版本,也是开源的。以下是我用于身份验证中间件的内容:

    namespace App\Http\Middleware;
    
    use Closure;
    
    class Auth
    {
        /**
         * Handle an incoming request.
         *
         * @param \Illuminate\Http\Request $request
         * @param \Closure                 $next
         *
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            if ($user = Sentinel::check()) {
                if ($user->hasAccess(Route::currentRouteAction())) {
                    view()->share('user', $user);
                } else {
                    return view('errors.forbidden');
                }
            } else {
                return redirect()->guest('/login');
            }
    
            return $next($request);
        }
    }
    
    然后,您的菜单代码可以更改为:

    @if ($user->hasAccess('something'))
        <li class="{{ (Request::is('panda/something') ? 'open' : '') }}">
            <a href="{{ URL::to('panda/flot_charts') }}" class="menu-dropdown">
                 <span class="menu-text">Menu 1</span><i class="menu-expand"></i>
            </a>
            <ul class="submenu">
            @if ($user->hasAccess('school'))
                <li class="{{ (Request::is('panda/school') ? "active" : '') }}">
                     <a href="{{ route('school') }}"><i class="menu-icon fa fa-cogs"></i><span class="menu-text">Submenu</span></a>
                </li>
            @endif
            </ul>
        </li>
    @endif
    
    @if($user->hasAccess('something'))
    
    • @if($user->hasAccess('school'))
    • @恩迪夫
  • @恩迪夫

    不过,这只是一个小小的变化。你可能想看看哪一个似乎是最受欢迎的。

    为什么你认为这是错误的?此外,这里的中间件类没有太大区别,因为它们旨在过滤http请求。这段代码很有效,但我希望有一个更简单的解决方案。谢谢您的帮助。我会尝试哨兵和含咖啡因的菜单:)