博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2.0 下的 load() 方法的使用
阅读量:6306 次
发布时间:2019-06-22

本文共 1391 字,大约阅读时间需要 4 分钟。

一 问题

最近在使用 Yii2.0,遇到一个 bug:在 /models/OrderDetail.php add() 方法中调用 load() 方法加载数据,却加载不了。

public function add($data){    if ($this->load($data) && $this->save()) {        return true;    }    return false;}

二 排错

2.1 将 add() 方法修改成如下(添加 $this->getErrors()):

public function add($data){    if (!$this->load($data) ) {        var_dump($this->getErrors()); echo 'load'; exit;    }    if (!$this->save() ) {        var_dump($this->getErrors()); echo 'save'; exit;    }    return false;}

浏览器显示 "array(0){}load"。说明确实是 load() 方法加载不了数据。

2.2 查看 load() 方法源码:

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

主要看 formName() 方法。该方法通过类反射返回与模型名对应的表单名。在 load() 方法中,在通过 $this->formName() 获得 $scope 的值后,就会判断变量 $data[$scope] 是否存在,若是就会返回真,否则返回假。由于变量 $data[$scope] 确实不存在,所以导致了 bug 的产生。

三 解决方法

3.1 可以将 add() 方法修改成如下:

public function add($data){    // OrderDetail 是模型名    if ($this->load(['OrderDetail' => $data]) && $this->save()) {      return true;    }    return false;}

3.2 不修改 add() 方法,而是在对应的控制器里修改传给模型的 $data,将其修改为 $data['OrderDetail'] = $data; 再将 $data 传过来就可以了。

 

转载于:https://www.cnblogs.com/afee666/p/6882311.html

你可能感兴趣的文章
iOS 学习资料汇总
查看>>
centos7 yum安装jdk
查看>>
Bluedroid与BluZ,蓝牙测试方法的变动(基于bludroid和BlueZ的对比)
查看>>
接口和抽象类有什么区别
查看>>
Linux 下添加用户,修改权限
查看>>
请问view controller scene,该如何删除
查看>>
bootstrap新闻模块样式模板
查看>>
zzzzw_在线考试系统①准备篇
查看>>
App Store 审核被拒的23个理由
查看>>
剑指offer第二版-1.赋值运算符函数
查看>>
javascript 对象
查看>>
Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
查看>>
Echart:前端很好的数据图表展现工具+demo
查看>>
CATransform3D iOS动画特效详解
查看>>
Linux VNC黑屏(转)
查看>>
Java反射简介
查看>>
react脚手架应用以及iview安装
查看>>
shell学习之用户管理和文件属性
查看>>
day8--socket网络编程进阶
查看>>
node mysql模块写入中文字符时的乱码问题
查看>>