我创建了ServiceProvider,并为构建菜单添加了一些逻辑。此逻辑基于经过身份验证的用户。但是,Auth::user()
Auth::getUser()
不起作用,看起来像会话未启动。
我将我的逻辑放在boot
方法中。
临时解决问题,我创建middleware
并在那里放置逻辑,但我不认为这是正确的。
那么ServiceProvider这个(类似的)逻辑不是正确的地方?或者与用户合作的地方更好?
例如:
class MenuServiceProvider extends ServiceProvider {
public function boot() {
if(Auth::user()->isAdmin()) { // here Auth::user is null
$this->createAdminMenu();
} else {
$this->createDefaultMenu();
}
}
public function register()
{
//
}
答案 0 :(得分:0)
想到这一点,同时最近也在努力解决这个问题。正如您在评论中指出的那样,问题是当加载服务提供商时,会话信息甚至还没有开始 - 这会带来问题。解决方案是创建一个可以在Http Kernel类中配置的中间件,为每个请求自动加载它。
因此,根据上面的代码,您可能会遇到以下情况:
<?php
namespace App\Http\Middleware;
use Auth;
class MenuMiddleware
{
public function handle($request, \Closure $next)
{
if(Auth::user()->isAdmin()) { // here Auth::user is null
$this->createAdminMenu();
} else {
$this->createDefaultMenu();
}
return $next($request);
}
...
}
然后,在您的RouteServiceProvider中 - 只需在全局中间件数组中注册中间件。