【问题标题】:Laravel Blade @guest directive for multiple guardsLaravel Blade @guest 指令用于多个守卫
【发布时间】: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

标签: php laravel laravel-blade


【解决方案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 警卫
猜你喜欢
  • 2021-10-22
  • 2019-07-20
  • 2018-09-23
  • 1970-01-01
  • 2020-06-18
  • 2020-08-07
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多