laravel 路由注入的模型对象为空,获取不到数据
框架版本 : laravel 5.2
问题描述
需要对已存在的模型额外做一个添加筛选条件的列表,将之前的控制器、路由以及涉及到路由跳转的模型都复制了一份。
# 用户管理
Route::resource('user', 'UserController', ['except' => ['show']]);
# 增加用户角色为代理商的路由
Route::resource('agent', 'AgentController', ['except' => ['show']]);
控制器中涉及到注入模型对象的方法都会报错,百度问题有提到添加路由中间件的: \Illuminate\Routing\Middleware\SubstituteBindings::class
但我的添加的路由没有使用自定义的 web 中间件,且这个路由中间件类添加到路由组中间件中是找不到该类的。并且之前的用户控制器也没有使用这样的中间件,但模型注入是正常的。
之后突然意识到,可能是路由定义的参数不对。用户控制器默认注入的变量是 $user
,而代理商控制器默认注入的变量是 $agent
,而代码里 public function edit(User $user)
显然是对应不上 $agent
的,应该改成 public function edit(User $agent)
。
修改之后,页面访问正常。