thumber 2015-06-05 13:30:41 15558次浏览 6条回复 5 6 0

问题描述:我将表单数据整理为一个json字符串,通过ajax post 到服务器,服务器接受后解析为一个数组$arr.然后调用$model->load($arr),结果总是返回false。

问题原因:load函数有两个参数 public function load($data, $formName = null) ,当调用时不填formName的时候,函数内部会自动调用$model->formName(),这个函数将返回与模型名对应的表单名称,所以load将会执行访问$arr[$this->formName()],而这个变量并没有在我的数组里。所以导致load函数返回false;

解决办法:$model->load(['formName'=>$arr],'formName');

觉得很赞
  • 回复于 2015-06-25 07:16 举报

    ① 表单不是用yii生成的对吗?
    ② 还有为何ajax提交的时候要将表单数据转换为json提交到后台,然后后台又转换成为数组,直接提交难道不行?

    1 条回复
    回复于 2015-06-25 10:13 回复

    1、我没有用yii自动生成的表单,而是直接用Html写的。
    2、可以直接提交数据,我觉得转换一下规范一点,不过我也不确定。

    觉得很赞
  • 回复于 2016-10-22 21:59 举报

    直接load($data,'')也可以,如果没有直接用html写的表单的话!用小部件生成的表单上传的数据会有一个键名代表model,所以不用带'',具体可以参考源码!

    觉得很赞
  • 回复于 2016-11-27 04:48 举报

    今天遇到类似的问题,通过ajax传递过来的数据,回调的数据一直不正确,后来发现是这个问题。
    贴下源代码

    public function load($data, $formName = null)
    {
        //$scope是通过类反射获取的表单名
        $scope = $formName === null ? $this->formName() : $formName;
        if ($scope === '' && !empty($data)) {
            $this->setAttributes($data);
    
            return true;
            //如果$data中存在表单名,则设置属性,否则返回false
        } elseif (isset($data[$scope])) {
            $this->setAttributes($data[$scope]);
    
            return true;
        } else {
            return false;
        }
    }
    

    解决方法:$model->load(Yii::$app->request->post(),'')

  • 回复于 2018-03-27 12:31 举报

    我的加上formName时候并不可以,报错空.png
    想变为true,只能执行elseif里的代码,然后我把传过来的数据写到$post['formName']中,依然是报上面的那个错误,是$this->setAttributes($data[$scope])里面的函数报错,继续跟踪代码,发现是setAttributes()中调用的的$this->safeAttributes()报错,继续跟踪,safeAttributes()方法中是$scenarios = $this->scenarios()报错,这个方法打开后就看不懂了 不知道该怎么解决

  • 回复于 2018-04-01 10:24 举报

    $dataModel = [

            'ItemSupplier' => Yii::$app->request->post()//model模块 中对应的数据表的文件名
        ];
    

    $supplierModel->load($dataModel);

    或是
    $supplierModel->load(Yii::$app->request->post(), '');

  • 回复于 2018-05-23 20:19 举报

    谢谢谢谢谢谢

您需要登录后才可以回复。登录 | 立即注册