我可以从Controller
访问会话数据,而无需传递来自MyController
的请求
class Controller extends BaseController
{
public function __construct()
{
// ** next line throws error:
// "Session store not set on request."
$userdata = request()->session()->get('userdata');
// I want to inject `userdata` into every template without
// passing data from child controllers.
view()->share(['userdata' => $userdata);
}
}
class MyController extends Controller
{
public function __construct(Request $request)
{
// This works, so the data is in fact in the session.
// I don't want to pass it, or `$request` to the parent from here.
$userdata = $request->session()->get('userdata');
...
}
}
发布于 2019-07-08 21:09:14
它不能在您的__construct()
方法中工作的原因是因为StartSession
中间件尚未运行。
要解决这个问题,只需在控制器上使用middleware()
方法:
public function __construct()
{
$this->middleware(function ($request, $next) {
$userdata = $request->session()->get('userdata');
view()->share(compact('userdata'));
return $next($request);
});
}
Laravel 5.3升级指南 (向下滚动控制器部分)
在Laravel5.3中,您无法访问控制器构造函数中的会话或经过身份验证的用户,因为中间件尚未运行。 作为一种选择,您可以直接在控制器的构造函数中定义基于闭包的中间件。
https://stackoverflow.com/questions/56942059
复制相似问题