Laravel Blade @guest 多个守卫指令

nic*_*ick 6 php laravel laravel-blade

我有用户警卫(名称为web)和管理员警卫(名称为admin)。因此,为了显示/隐藏内容,我使用 Laravel Blade 指令@auth('web')@auth('admin')但不知何故它@guest不起作用,所以我被迫像这样使用:

@auth('admin')
    <li>Dashboard</li>
    <li>Log out</li>
@endauth

@auth('web')
    <li>Create Post</li>
    <li>Log out</li>
@endauth

@guest('admin')
    @guest('web')
        <li>Contact</li>
        <li>About us</li>
    @endguest
@endguest
Run Code Online (Sandbox Code Playgroud)

我嵌套了访客指令,但感觉太多了,有更好的方法吗?

ker*_*rin 2

刚刚测试过这个 - 使用 Laravel 5.4.36。

<ul class="nav navbar-nav">
    @guest
        <li>I'm a guest</li>
    @endauth
    <li>{{ Html::link(url('/consultants'), 'Consultants') }}</li>
    <li>{{ Html::link(url('/clients'), 'Clients') }}</li>
    <li>{{ Html::link(url('/tasks'), 'Tasks') }}</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,“我是访客”仅向未经身份验证的用户显示。

我注意到你有@endguest但没有@endauth——这只是一个错字吗?

更新:如果你这样做,它会如你所期望的那样工作吗?

@auth('admin')
    <li>Dashboard</li>
    <li>Log out</li>
@endauth

@auth('web')
    <li>Create Post</li>
    <li>Log out</li>
@endauth

@guest
    <li>Contact</li>
    <li>About us</li>
@endauth
Run Code Online (Sandbox Code Playgroud)