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很高兴我能帮上忙!:)很抱歉输入错误。