2017-01-10 130 views
1

我想在AppserviceProvider中访问Authenticated user id它的工作正常,当我在应用程序中意味着一旦登录其工作正常,但是当我注销它给出错误而不是去到登录页面错误试图获取非对象的属性(laravel 5.3)

试图让非对象

这是我写的引导方法Appserviceprovider的代码的性能。

public function boot() 
{ 
    view()->composer('*', function($view){ 
    $view->with('user', Auth::user()); 

    $counter = DB::table('notifications')->where('notifications.userid', Auth::user()->id)->count(); 
    View::share('counter', $counter); 
    }); 

它会给我上面的查询where子句时出错,当我注销。其原因后注销其无法得到auth用户ID .. 请帮助我如何解决或如何做到这一点的最好的方式,如果任何

+0

当你注销'Auth :: user() - > id'时,问题出在这里'Auth :: user()'是空的 – Beginner

回答

0

你应该看看这个Laravel protecting routes

可以保护路由所以当你没有登录时它们不会被访问。这应该解决你的问题。

如果您希望此路线在您未登录时可访问,则应在查询周围设置if语句。您可以使用Auth::check(),看看用户是否登录。

if(Auth::check()) { 
    //Do stuff 
} 
0

为了避免这种情况,当你退出,因为Auth::user()为空只需使用一个三元条件

如果Auth::user()然后用Auth::user()->id否则,如果不使用null值,而不是

Auth::user() ? Auth::user()->id : null 

改变这一行

$counter = DB::table('notifications')->where('user_notifications.user_id', Auth::user() ? Auth::user()->id : null)->count(); 
+0

亲爱的它仍然存在同样的错误 –

+0

@recoverymen你能var_dump(Auth :: user());'看到它的结果,如果你注销 – Beginner

+0

结果是什么?你可以显示它 – Beginner

0

我觉得你的代码需要更新,如:

public function boot() 
{ 
    if(Auth::user()){ 
     view()->composer('*', function($view){ 
     $view->with('user', Auth::user()); 

     $counter = DB::table('notifications')->where('user_notifications.user_id', Auth::user()->id)->count(); 
     View::share('counter', $counter); 
     }); 
    } 

希望这对你的工作!

+0

它仍然给出相同的错误..我不能使用检查方法的开始,因为'$ view-> with('user',Auth :: user());' 给我访问权限 –

相关问题