如何使用中间件定义 blade 模板的一部分?
How can I use Middleware to define a section of a blade template?
我有一个导航栏,如果登录的用户是管理员,我想向管理仪表板显示 link。如果没有,它应该什么都不显示。我为来宾设置了类似的设置,例如
@if (Auth::guest())
<li><a href="{{ url('/auth/login') }}">Login</a></li>
<li><a href="{{ url('/auth/register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">{{ Auth::user()->name }} <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/profile') }}">Profile</a></li>
<li><a href="{{ url('/auth/logout') }}">Logout</a></li>
</ul>
</li>
@endif
但是我如何为登录用户和管理员执行此操作?我目前有
<ul class="nav navbar-nav">
<li><a href="{{ url('/') }}">Home</a></li>
@if (Auth::guest())
@else
<li><a href="{{ url('/admin') }}">Admin Dashboard</a></li>
@endif
</ul>
我像这样在管理路由上设置了中间件
Route::get('admin', ['middleware' => 'admin', 'uses' => 'AdminController@index']);
看起来像
public function handle($request, Closure $next)
{
if ($request->user()->role != 1)
{
return redirect('home');
}
return $next($request);
}
没关系,我只是不知道如何使用它来定义 blade 模板的一部分。
看起来你的用户模型有一个名为 role
的属性,所以你可以这样做:
<ul class="nav navbar-nav">
<li><a href="{{ url('/') }}">Home</a></li>
@if (Auth::user()->role != 1)
{{-- I am not an admin user --}}
@else
{{-- I am an admin user --}}
@endif
</ul>
如果不是您的情况,那么您需要向用户模型添加一个新属性。通过这种方式,您可以模拟上面的代码。
为了更好的代码结构和顺序,我建议你像这样在用户模型中创建一个函数:
public function isAdmin(){
return (\Auth::check() && $this->role == 1);
}
或另一个检查它是否是普通用户:
/** An user who is authenticated but it is not an admin */
public function isRegular(){
return (\Auth::check() && $this->role != 1);
}
然后,在您的应用程序和视图中,您可以像这样使用它们:
@if (Auth::user()->isRegular())
{{-- I am not an admin user --}}
@else
{{-- I am an admin user --}}
@endif
或
@if (Auth::user()->isAdmin())
{{-- I am an admin user --}}
@else
{{-- I am not an admin user --}}
@endif
我有一个导航栏,如果登录的用户是管理员,我想向管理仪表板显示 link。如果没有,它应该什么都不显示。我为来宾设置了类似的设置,例如
@if (Auth::guest())
<li><a href="{{ url('/auth/login') }}">Login</a></li>
<li><a href="{{ url('/auth/register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">{{ Auth::user()->name }} <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="{{ url('/profile') }}">Profile</a></li>
<li><a href="{{ url('/auth/logout') }}">Logout</a></li>
</ul>
</li>
@endif
但是我如何为登录用户和管理员执行此操作?我目前有
<ul class="nav navbar-nav">
<li><a href="{{ url('/') }}">Home</a></li>
@if (Auth::guest())
@else
<li><a href="{{ url('/admin') }}">Admin Dashboard</a></li>
@endif
</ul>
我像这样在管理路由上设置了中间件
Route::get('admin', ['middleware' => 'admin', 'uses' => 'AdminController@index']);
看起来像
public function handle($request, Closure $next)
{
if ($request->user()->role != 1)
{
return redirect('home');
}
return $next($request);
}
没关系,我只是不知道如何使用它来定义 blade 模板的一部分。
看起来你的用户模型有一个名为 role
的属性,所以你可以这样做:
<ul class="nav navbar-nav">
<li><a href="{{ url('/') }}">Home</a></li>
@if (Auth::user()->role != 1)
{{-- I am not an admin user --}}
@else
{{-- I am an admin user --}}
@endif
</ul>
如果不是您的情况,那么您需要向用户模型添加一个新属性。通过这种方式,您可以模拟上面的代码。
为了更好的代码结构和顺序,我建议你像这样在用户模型中创建一个函数:
public function isAdmin(){
return (\Auth::check() && $this->role == 1);
}
或另一个检查它是否是普通用户:
/** An user who is authenticated but it is not an admin */
public function isRegular(){
return (\Auth::check() && $this->role != 1);
}
然后,在您的应用程序和视图中,您可以像这样使用它们:
@if (Auth::user()->isRegular())
{{-- I am not an admin user --}}
@else
{{-- I am an admin user --}}
@endif
或
@if (Auth::user()->isAdmin())
{{-- I am an admin user --}}
@else
{{-- I am not an admin user --}}
@endif