laravel 资源路由,模型绑定,隐式传值
首先介绍背景,
简简单单的资源路由:
//----------管理员 管理---------- Route::resource('adminUser', 'UserController');
简简单单的资源控制器并绑定了User模型,
这里只贴出一部分,主要是$user的问题
/** *修改 展示 */ public function edit(User $user) { echo '我是edit,看到我说明你访问到这个方法了'; dump($user); exit(); }
接着看,这是访问edit的路由
然后,访问edit看结果
可以确认的是确实访问到了,edit这个方法了,但是根据打印结果,可以知道$user是个空对象,没有值。。。
下面我们做些调整,其他的都不变 ,改变一下路由,由adminUser改为user
//----------管理员 管理---------- Route::resource('user', 'UserController');
查看,更改后的edit路由
,再次访问edit
此时就可以正常得到$user了,
也就是说,资源路由的名字必须与模型名字相同,且是小写的,变成大写的就得到空对象,这是什么原因?其实我也不知道,我觉得无论路由的名字(像大小写,或者像上面的那种情况)怎么写,都是指向那个控制器中的edit方法,方法用了依赖注入绑定了User模型,只要在访问的时候给个id,按理说应该可以访问到的,因为路由只是改变的访问的url,其他的不影响吧,laravel自动根据id获取模型实例,所以$user不应该是空对象,但事实证明还真不能乱写。。。。
该疑问已解决:
隐式传值,路由中的参数名要和方法中的参数名保持一致,若是用到了资源路由和资源控制器绑定模型(用命令创建的那种),最好路由名字和模型名相同,因为是使用命令创建的(框架帮我们做的),所以框架会默认创建小写形式的模型实例,若路由名不与模型名相同,则会出现参数不匹配,得到空对象