在 Laravel 5.1 中显示菜单的最佳方式是什么?
What is the best way to display menu in 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
看起来像:
我知道这个解决方案不是很好。我正在寻找一种更简单的方式来显示菜单。
我总是需要检查访问者看到的是哪个页面,并且相同的菜单必须处于活动状态。
现在我以后用Sentry, but I'd like to use middleware
我可以将菜单参数存储在db
中吗?
感谢您的帮助!
彼得
我使用 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 which appears to be the most popular of the package for Laravel 5.1 menu creation on Packalyst.
我想问一下,用访问参数显示菜单的最佳方式是什么。
所以,现在我在 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
看起来像:
我知道这个解决方案不是很好。我正在寻找一种更简单的方式来显示菜单。
我总是需要检查访问者看到的是哪个页面,并且相同的菜单必须处于活动状态。
现在我以后用Sentry, but I'd like to use middleware
我可以将菜单参数存储在db
中吗?
感谢您的帮助!
彼得
我使用 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 which appears to be the most popular of the package for Laravel 5.1 menu creation on Packalyst.