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

    该疑问已解决:

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

  • 相关阅读:
    关于C语言中的绝对值函数
    B. Interesting drink(水题 二分)
    A. Boring Apartments(水题)
    A. FashionabLee(水题)
    A. Collecting Coins(水题)
    A. Fancy Fence(水题)
    最小公因数,最小公倍数,以及快速幂模板
    android:layout_gravity 和 android:gravity 的区别
    Android开发之Intent略解
    java中类的创建及初始化过程
  • 原文地址:https://www.cnblogs.com/zqblog1314/p/13477498.html
Copyright © 2011-2022 走看看