zoukankan      html  css  js  c++  java
  • 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不应该是空对象,但事实证明还真不能乱写。。。。

    该疑问已解决:

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

  • 相关阅读:
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
    table设置表格有滚动条
    Bootstrap data-toggle 元素 终止了链接默认行为,加入pill ,开启链接
    table的border-radius
    HTML之电话: 邮箱: 网址
    MySQL精华笔记
    hadoop集群配置全过程
    H5 input默认数字键盘,显示为密码格式
    ios中文模糊搜索兼容问题
    Yii2学习笔记---内附GridView配置总结
  • 原文地址:https://www.cnblogs.com/zqblog1314/p/13477498.html
Copyright © 2011-2022 走看看