2017-08-19 29 views
0

我是非常新laravel,所以我老实说不知道提供什么信息,但我会尽我所能地问这个问题贯穿始终。Laravel Blade如果语句抛出非对象属性错误Auth检查与警卫

让我们看看我的代码:

@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被记录在下拉菜单中不会显示“管理博客文章”链接,因为这就是一个Admin链接...如果Admin在登录然而然后显示这两个链接。

正如你可以在下面的代码片段中看到的那样,这是相同的顶部的相同的语句。这一个工作得很好,但父母如果声明不希望似乎工作。

{{-- 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

附件是我收到错误消息(S)以及整个_nav.blade.php一个引擎收录的屏幕截图。这个观点是局部的。在开始工作之前,我也刚刚运行了作曲家更新,并注意到laravel框架刚刚从5.4.32变成了5.4.33。不知道这是否会造成戏剧性的变化。

https://pastebin.com/pLDTmU4w

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

我可以提供我的GitHub库链接,应要求该项目。

+0

尝试增加空的()条件呢!它应该在那之后工作。 –

+0

添加它在哪里,你能提供一个答案,并使用代码示例? –

+0

如果你在控制器和路由中检查你的中间件,它将更容易在你的视图中处理! –

回答

1

因为您使用的是管理员守卫,您需要从中取回用户。试试这个在线38:

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

,或者你可以检查是否管理员

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

太棒了!这解决了它。我不知道现在我必须将所有用户变量都变成三元运算符。插入那条线,它就像一个魅力!谢谢! –