2015-10-20 2 views
1

Я хотел бы спросить, что это лучший способ показать меню с параметрами доступа.Каков наилучший способ отображения меню в Laravel 5.1?

Итак, теперь я использую следующий код в моем 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 

Это выглядит следующим образом: screenshot about left menu bar

Я знаю, что это решение не очень хорошо. Я ищу более простой и простой способ показать меню.

Мне всегда нужно проверить, какую страницу видит посетитель, и то же меню должно быть активным.

Теперь я использую Sentry, но я бы хотел использовать middleware в будущем.

Должен ли я хранить параметры меню в db?

Благодарим за помощь!

Питер

+0

Почему вы это делаете неправильно? Кроме того, классы промежуточного программного обеспечения здесь не имеют большого значения, потому что они предназначены для фильтрации HTTP-запросов. – manix

+0

Этот код работает, но я надеюсь, что существует более простое решение. – kotapeter

ответ

1

Я использую 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 

Это лишь небольшое изменение, однако. Возможно, вы захотите проверить Caffeinated Menus, который, по-видимому, является самым популярным из the package for Laravel 5.1 menu creation on Packalyst.

+0

Благодарим вас за полезный ответ. Я попробую Sentinel и Caffeinated Menus :) – kotapeter