Laravel Blade @guest 指令用于多个守卫

Posted

技术标签:

【中文标题】Laravel Blade @guest 指令用于多个守卫【英文标题】:Laravel Blade @guest directive for multiple guards 【发布时间】:2018-03-11 22:06:48 【问题描述】:

我有用户警卫(名称为web)和管理员警卫(名称为admin)。因此,为了显示/隐藏内容,我使用 Laravel 刀片指令 @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

我嵌套了来宾指令,但感觉太多了,有什么更好的方法吗?

【问题讨论】:

你真的有两个级别的Guest吗?您如何确定未经身份验证的用户是否为管理员??? 不,我的意思是我有三个警卫:web(用于用户)、api(我不使用这个)和 admind(用于管理员)。我想为未经身份验证的用户(无论是用户还是管理员)显示联系方式和关于我们的信息。但是,如果我单独使用 @guest 而不使用 ('admin') 或 ('web'),它会显示给所有人:来宾、用户和管理员 你使用的是什么版本的 Laravel? 使用 laravel 5.5.12 【参考方案1】:

刚刚对此进行了测试 - 使用 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>

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

我注意到你有@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

【讨论】:

顺便说一句,@guest 指令有效,但仅适用于 web 警卫

以上是关于Laravel Blade @guest 指令用于多个守卫的主要内容,如果未能解决你的问题,请参考以下文章

5 个非常有用的 Laravel Blade 指令,你用过哪些?

如何在 vuejs 指令中使用 Laravel Blade 语法?

Laravel Blade 模板清理

下拉菜单未打开 - laravel 5

Laravel 5.1 Ajax 从 Blade View 获取 html

Laravel Blade 使用自定义函数