Laravel Blade If语句在使用Guard进行Auth检查时抛出非对象属性错误

时间:2017-08-19 02:57:25

标签: php twitter-bootstrap laravel blade laravel-blade

我对laravel非常陌生,所以我老实说不确定要提供哪些信息,但我会尽我所能来全面提问。

让我们来看看我的代码:

@if(Auth::guard('admin')->check() || Auth::guard('web')->check())
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
    {{ Auth::user()->name }} <span class="caret"></span>
    </a>


    {{-- Authenticated Dropdown Menu --}}
    <ul class="dropdown-menu" role="menu">
      {{-- Admin Links --}}
      @if (Auth::guard('admin')->check())
        <li><a href="{{ route('posts.index') }}">Manage Blog Posts</a></li>
        <li role="separator" class="divider"></li>
      @endif

      {{-- User Links --}}
      @if (Auth::guard('web')->check() || Auth::guard('admin')->check())
        <li><a href="#">User Test Link</a></li>
        <li role="separator" class="divider"></li>
      @endif

      {{-- Logout and Form --}}
      <li>
        <a href="{{ route('logout') }}"
        onclick="event.preventDefault();
        document.getElementById('logout-form').submit();">
        Logout
        </a>
        {!! Form::open(['route' => 'logout', 'id' => 'logout-form', 'style' => 'display: none;']) !!}
        {!! Form::close() !!}
      </li>
      {{-- End Logout Form --}}
    </ul>
  </li>

@else
  <li><a href="{{ route('login') }}">Login</a></li>
  <li><a href="{{ route('register') }}">Register</a></li>
@endif

现在我认为Auth::guard('admin')->check()返回true或false,具体取决于用户是否具有身份验证。我还需要针对两个警卫运行此if语句,并检查管理员是否已登录或用户是否已登录。

基本上,正如你可以从我的代码中看到的那样,我希望登录时显示引导下拉列表,如果没有则显示登录和注册按钮。

那么如果在下拉列表中记录了User,则不会显示&#34;管理博客帖子&#34;链接,因为那是Admin链接...如果登录Admin,则显示两个链接。

正如您在下面的代码片段中所看到的,这是相同的SAME EXACT if语句。这个工作正常,但父if语句似乎不想工作。

  {{-- User Links --}}
  @if (Auth::guard('web')->check() || Auth::guard('admin')->check())
    <li><a href="#">User Test Link</a></li>
    <li role="separator" class="divider"></li>
  @endif

只有当我以管理员身份登录并尝试访问不受auth:admin中间件保护的任何网页时,才会出现此错误。

我是否收到此错误,因为我错误地嵌套了我的if语句?也许我只是累了,需要第二眼才能看到最小的错误。我在YouTube上关注了DevMarketers Multi Auth教程,以帮助您进行设置。

(DevMarketer的YouTube多重身份验证教程:https://youtu.be/iKRLrJXNN4M?list=PLwAKR305CRO9S6KVHMJYqZpjPzGPWuQ7Q

附件是我获取的错误消息的屏幕截图以及整个_nav.blade.php的pastebin。这种观点是偏袒的。在我开始工作之前,我也只是运行了作曲家更新,并注意到laravel框架刚刚从5.4.32变为5.4.33。不知道这是否会产生巨大的影响。

https://pastebin.com/pLDTmU4w

http://imgur.com/a/0y6kd

我可以根据要求提供此项目的github repo链接。

1 个答案:

答案 0 :(得分:1)

因为您正在使用管理员防护,所以您需要从中检索用户。在第38行试试这个:

{{ Auth::guard('admin')->user()->name }}

或者您可以检查管理员

{{ Auth::guard('admin')->check() ? Auth::guard('admin')->user()->name : Auth::user()->name }}