Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 从父控制器访问会话数据,但不传入该数据_Laravel - Fatal编程技术网

Laravel 从父控制器访问会话数据,但不传入该数据

Laravel 从父控制器访问会话数据,但不传入该数据,laravel,Laravel,我是否可以从控制器访问会话数据,而不传递来自MyController的请求 类控制器扩展BaseController { 公共函数构造() { //**下一行抛出错误: //“未根据请求设置会话存储。” $userdata=request()->session()->get('userdata'); //我想在每个模板中注入'userdata',而不需要 //从子控制器传递数据。 view()->share(['userdata'=>$userdata); } } 类MyController扩展

我是否可以从
控制器
访问会话数据,而不传递来自
MyController
的请求

类控制器扩展BaseController
{
公共函数构造()
{
//**下一行抛出错误:
//“未根据请求设置会话存储。”
$userdata=request()->session()->get('userdata');
//我想在每个模板中注入'userdata',而不需要
//从子控制器传递数据。
view()->share(['userdata'=>$userdata);
}
}
类MyController扩展控制器
{
公共函数构造(请求$Request)
{
//这是可行的,因此数据实际上在会话中。
//我不想从这里将它或“$request”传递给家长。
$userdata=$request->session()->get('userdata');
...
}
}

它在
\uu construct()
方法中无法工作的原因是
启动会话
中间件尚未运行

要解决此问题,只需在控制器上使用
中间件()
方法:

public function\uuuu construct()
{
$this->middleware(函数($request,$next){
$userdata=$request->session()->get('userdata');
view()->share(compact('userdata'));
返回$next($request);
});
}

(向下滚动控制器部分)

在Laravel 5.3中,您无法访问控制器构造函数中的会话或已验证用户,因为中间件尚未运行。
或者,您可以直接在控制器的构造函数中定义基于闭包的中间件


您使用的是哪一版本的Laravel?如果可以避免的话,我想避免在每个控制器上添加依赖项。这与首先使用父控制器的原因类似。似乎很奇怪,我无法访问请求对象范围之外的会话数据。如果在Laravel中不可能,那就不是世界末日。@RossWilson 5.8你不能吗se
session('key')
?就像
$var=session('userdata')
@mateuswunges我也试过了,但它只是从父控制器返回null。谢谢Ross!它只是在
session
$request->session()->get('userdata');
(我编辑了它)@Coder1很高兴我能帮上忙!:)很抱歉输入错误。