Laravel刀片`@ auth`指令无法按预期运行

时间:2019-04-04 04:11:36

标签: php laravel laravel-blade

我正在尝试根据当前登录的用户卷动态选择主刀片服务器模板。(此处应转到“ shopowner”身份验证块)

@auth('shopmanager')
@extends('theme::Admins.shopmanager.layout.master')
@endauth

@auth('shopowner')
@extends('theme::Admins.shopowner.layout.master')
@endauth

,但这总是在尝试编译“ shopmanager”主模板时产生错误。它不会进入“ shopmanager” @auth块,因为如果我在该块内打印,它不会打印任何内容。

仅当我完全注释掉该行时,它才起作用。

P.S。

这是主theme::Admins.shopmanager.layout.master模板文件 不能加载。

@extends('theme::Admins.outline.layout.master')

@include('theme::Admins.shopmanager.layout.common.header')
@include('theme::Admins.shopmanager.layout.common.left-sidebar') // The error throws from inside this view.
@include('theme::Admins.shopmanager.layout.common.footer')

@section('title-head', __('Shop Manager'))

我可以将@auth检查包在@include行周围,但要注意的是,应该从编译中跳过此完整文件。

3 个答案:

答案 0 :(得分:2)

尝试下面的代码,希望这对您有所帮助:

   @if(Auth::check())
      @if(Auth::user()->role=='shopmanager')
          @extends('theme::Admins.shopmanager.layout.master')
      @else
          @extends('theme::Admins.shopowner.layout.master')
      @endif
    @endif

答案 1 :(得分:0)

如果您那时候有多重身份验证,请尝试以下方法:

@if(Auth::guard('shopmanager')->user())
   @extends('')
@else
   @extends('')
@endif

就我而言,我正在使用此代码来处理经理,客户和管理员。

  1. 管理器:Auth :: guard('manager')-> user()
  2. 管理员:Auth :: user()
  3. 客户:Auth :: guard('customer')-> user()

答案 2 :(得分:0)

  

已解决

根据我的学习,@extend(...)将始终被编译,而不考虑外部包装条件。因此必须移至基于动态变量的块。

@auth('shopmanager')
    @php
        $masterTemplate = 'theme::Admins.shopmanager.layout.master';    
    @endphp
@endauth

@auth('shopowner')
    @php
        $masterTemplate = 'theme::Admins.shopowner.layout.master';    
    @endphp
@endauth

@extends($masterTemplate)