如何使用中间件定义 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