我试图通过我的控制器获取用户的未读通知。
这有效:
public function notifications(){
return \App\User::find(auth()->user()->id)->unreadNotifications()->limit(5)->get();
}
这不,它返回一个空集合:
public function notifications(){
return auth()->user()->unreadNotifications()->limit(5)->get();
}
你能告诉我我错过了什么吗?提前致谢。
使用Laravel 5.8和Backpack 3.5。
使用权限管理器包的UseBackpackAuthGuardInsteadOfDefaultAuthGuard中间件,Laravel的默认身份验证保护程序在背包路由中使用Backpack auth是不可或缺的。在控制器的其余部分,auth()和backpack_auth正常工作。
试试这个:
public function notifications()
return Auth::user()->unreadNotifications()->limit(5)->get();
}
正如文档中所述:
您可以通过Auth Facade访问经过身份验证的用户:
或者,一旦用户通过身份验证,您就可以通过Illuminate \ Http \ Request实例访问经过身份验证的用户。请记住,类型提示类将自动注入到控制器方法中:
Auth
和auth()
可能在这里不起作用,因为你正在使用Backpack For Laravel身份验证,它使用的是与Laravel默认使用的不同的后卫。
这可能对你有用:
backpack_user()->unreadNotifications()->limit(5)->get();
如果有效,这就是原因:
如果你看看project/vendor/backpack/base/src/helpers.php
你会看到backpack_user()
是backpack_auth()->user()
的别名而backpack_auth
会做:
return \Auth::guard(backpack_guard_name());
这是重要的一点,因为它抓住了守卫定义的config/backpack/base.php
(默认是backpack
)并使用它而不是Laravel的web
的默认守卫。