xukunpeng

xukunpeng

这家伙有点懒,还没写个性签名!

  • 财富值10
  • 威望值0
  • 总积分30

个人信息

  • 回复了 的回答

    我也遇到了这个问题,研究了很长时间,后来决定看源代码。
    打开 vendor/yiisoft/yii2/base/Model.php

    load()方法调用了setAttributes($values, $safeOnly = true)。
    $values就是我们post过来的数据,$safeOnly没有理解,默认true,但是load()在调用setAttributes()没有传递$safeOnly参数,导致默认$safeOnly等于true

    setAttributes()方法中有这样一句
    $attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
    入托$safeOnly = true 调用 $this->safeAttributes(),否则调用$this->attributes()
    这两个方法应该都是返回当前model所定义的字段数组,但是$this->safeAttributes()始终为[],我试了一下$this->attributes()可以正常返回字段数组。

    所以解决办法:
    在load()调用setAttributes()时,传递第二个参数$safeOnly为false,一共两处。

        $scope = $formName === null ? $this->formName() : $formName;
        if ($scope === '' && !empty($data)) {
            $this->setAttributes($data,false);
    
            return true;
        } elseif (isset($data[$scope])) {
            $this->setAttributes($data[$scope],false);
    
            return true;
        } else {
            return false;
        }
    

    再测试成功了。 :)

    我一直在使用Laravel这个框架,非常的好用,而且感觉非常专业bug极少(目前我还没遇到过)。我也是刚接触yii这个框架,第一天就卡在了这里,看着官方教程做的。瞬间对这个框架没什么信心了。

    正解,亲测成功!!!

  • 赞了回答

    我也遇到了这个问题,研究了很长时间,后来决定看源代码。
    打开 vendor/yiisoft/yii2/base/Model.php

    load()方法调用了setAttributes($values, $safeOnly = true)。
    $values就是我们post过来的数据,$safeOnly没有理解,默认true,但是load()在调用setAttributes()没有传递$safeOnly参数,导致默认$safeOnly等于true

    setAttributes()方法中有这样一句
    $attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
    入托$safeOnly = true 调用 $this->safeAttributes(),否则调用$this->attributes()
    这两个方法应该都是返回当前model所定义的字段数组,但是$this->safeAttributes()始终为[],我试了一下$this->attributes()可以正常返回字段数组。

    所以解决办法:
    在load()调用setAttributes()时,传递第二个参数$safeOnly为false,一共两处。

        $scope = $formName === null ? $this->formName() : $formName;
        if ($scope === '' && !empty($data)) {
            $this->setAttributes($data,false);
    
            return true;
        } elseif (isset($data[$scope])) {
            $this->setAttributes($data[$scope],false);
    
            return true;
        } else {
            return false;
        }
    

    再测试成功了。 :)

    我一直在使用Laravel这个框架,非常的好用,而且感觉非常专业bug极少(目前我还没遇到过)。我也是刚接触yii这个框架,第一天就卡在了这里,看着官方教程做的。瞬间对这个框架没什么信心了。

  • 请问下,config/web.php这个文件是需要自己手动新建吗?是在目录下呢?

试用期 等级规则
30/50
资料完整度
10/100
用户活跃度
0/100

Ta的关注

1

Ta的粉丝

0

Ta的访客

7