Php Laravel 7用户数据在_构造中
使用Laravel7。 在控制器构造器中,我希望能够访问当前的用户详细信息,以便将主站点小部件(按钮链接等)和自定义用户小部件加载到视图中显示的一个小部件中Php Laravel 7用户数据在_构造中,php,laravel,laravel-7,Php,Laravel,Laravel 7,使用Laravel7。 在控制器构造器中,我希望能够访问当前的用户详细信息,以便将主站点小部件(按钮链接等)和自定义用户小部件加载到视图中显示的一个小部件中 use Illuminate\Support\Facades\Auth; ... $widgets = Cache::get("widgets"); $usersdata = Cache::get("userdata"); $this->middleware('auth'); $widgets =
use Illuminate\Support\Facades\Auth;
...
$widgets = Cache::get("widgets");
$usersdata = Cache::get("userdata");
$this->middleware('auth');
$widgets = array_merge($widgets, $usersdata[Auth::user()->id]["widgets"]);
View::share([
"widgets" => json_encode($widgets)
]);
然而,在研究的这一阶段,用户数据不可用(即使在认证之后?)。
不确定访问此文件的最佳方式,或者更好的做法可能是覆盖中间件身份验证(where?),以便它可以返回用户id或其他信息,例如:
$userid=$this->middleware('auth');
我希望在构造函数中使用此方法,以便对扩展此主控制器的所有控制器使用相同的方法。这是laravel的预期行为,您可以阅读更多有关它的信息 Laravel在运行之前首先收集所有特定于路线的中间件 在收集控制器时,通过管道发送请求 中间件创建了控制器的实例,因此 构造函数被调用,但是此时请求还没有准备好 然而 你可以找到泰勒的推理: 在构造函数中使用session或auth作为非请求是非常糟糕的 已经发生,会话和身份验证本质上与HTTP绑定 要求您应该在实际控制员中收到此请求 方法,您可以使用多个不同的 请求。通过强制控制器解析会话或身份验证 您现在正在强制执行整个 控制器忽略可能导致 测试时出现的重大问题等 因此,一种解决方案是将其应用于所有路由,类似于这样,其中
widgets
是您的新中间件:
Route::group(['middleware' => ['auth', 'widgets']], function () {
// your routes
});
但如果您真的想将其保留在构造函数中,则可以实现以下解决方法:
class YourController extends Controller
{
public function __construct(Request $request)
{
$this->middleware('auth');
$this->middleware(function ($request, $next) {
$widgets = Cache::get("widgets");
$usersdata = Cache::get("userdata");
$widgets = array_merge($widgets, $usersdata[$request->user()->id]["widgets"]);
View::share([
"widgets" => json_encode($widgets)
]);
return $next($request);
});
}
}
这回答了你的问题吗?