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 语法?