3

我正在尝试通过我的控制器获取用户的未读通知。

这有效:

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。

Laravel 的默认 auth 保护在背包路由中使用 Backpack auth,使用权限管理器包的 UseBackpackAuthGuardInsteadOfDefaultAuthGuard 中间件。在控制器的其余部分 auth() 和backpack_auth 正常工作。

4

2 回答 2

0

尝试这个:

public function notifications()
    return Auth::user()->unreadNotifications()->limit(5)->get();
}

如文档中所述:

您可以通过 Auth 门面访问经过身份验证的用户:

或者,一旦用户通过身份验证,您可以通过 Illuminate\Http\Request 实例访问经过身份验证的用户。请记住,类型提示的类将自动注入到您的控制器方法中:

于 2019-03-09T14:15:52.917 回答
0

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.phpbackpack默认情况下)并使用它而不是 Laravel 的默认守卫web.

于 2019-03-10T04:58:44.920 回答