Laravel8如何解决Creating default object from empty value报错
报错原因
报错Creating default object from empty value由两处代码错误直接触发:
- 你在控制器中直接通过
$this->session访问session属性,Laravel控制器默认不存在这个可直接访问的属性,该值为null,直接给null值的flashdata属性赋值时,PHP会自动尝试将空值转为标准对象,从而抛出该异常。 with()传参格式错误:该方法仅支持两种传参形式,要么传入「键名、键值」两个参数,要么传入一个关联数组批量传递视图变量,你传入了两个索引数组,且第一个数组内直接写赋值表达式,不符合方法调用规范。
修复方案
- 移除
with()方法内的session赋值逻辑,Laravel的session闪存通过session()助手函数或请求实例的session方法实现,不要嵌在视图传参逻辑里写。 - 修正
with()的传参格式,传入关联数组即可把变量传递给blade模板。
修复后完整控制器代码
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function GetUsers(){ // 闪存session数据 session()->flash('flashdata', 'gs'); // 正确传递视图变量 return view('users')->with([ 'userslist' => ['id'=>'1','name'=>'dummy_text'] ]); } }
额外校验项
- 确认路由绑定正确:
routes/web.php中需要存在根路径的路由绑定,示例:Route::get('/', [UserController::class, 'GetUsers']);,否则访问http://127.0.0.1:8000/不会走到该控制器方法。 - 视图中读取变量直接使用
{{ $userslist['name'] }}即可获取测试数据,读取闪存session使用{{ session('flashdata') }}即可。 - 如果偏好依赖注入的写法,也可以把Request实例注入到控制器方法中,通过
$request->session()->flash('flashdata', 'gs')实现闪存,效果和助手函数完全一致。
内容的提问来源于stack exchange,提问作者dev
相关产品推荐
相关产品推荐

