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不应该是空对象,但事实证明还真不能乱写。。。。

 

该疑问已解决:

隐式传值,路由中的参数名要和方法中的参数名保持一致,若是用到了资源路由和资源控制器绑定模型(用命令创建的那种),最好路由名字和模型名相同,因为是使用命令创建的(框架帮我们做的),所以框架会默认创建小写形式的模型实例,若路由名不与模型名相同,则会出现参数不匹配,得到空对象

 

posted @ 2020-08-11 18:21  养猪至富  阅读(422)  评论(0编辑  收藏  举报