全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Yii 2中的load()和save()示例详解

前言

本文主要给大家介绍的是关于Yii2中load()和save()的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍吧。

我这里用的数据库是mongo 数据库 为栗子:

public function load($data, $formName = null)
 {
  $scope = $formName === null ? $this->formName() : $formName; //调用load 一般我是 $test = new test() $test->load('参数1','参数2')
// 参数1 一般是post get 传过来的参数 第二个参数 是一个空字符串 '';
//  $this->formName() 返回的额是 你实例化的类的名字 new test() 最后返回的是test

  if ($scope === '' && !empty($data)) {
   $this->setAttributes($data);  //进入

   return true;
  } elseif (isset($data[$scope])) {
   $this->setAttributes($data[$scope]);

   return true;
  } else {
   return false;
  }
 }

接下来看   setAttributes()

public function setAttributes($values, $safeOnly = true)
 {
  if (is_array($values)) {
   $attributes = array_flip($safeOnly ? $this->safeAttributes() : $this->attributes());
//这里执行的是$this->safeAttributes()方法,该方法返回的是当前场景下需要验证的字段。最后$attributes打印下来看下图
foreach ($values as $name => $value) {
 if (isset($attributes[$name])) { 
    $this->$name = $value; 
 } elseif ($safeOnly) {
     $this->onUnsafeAttribute($name, $value); 
  } } 
 } 
}

图: 图1的文件名是test  实例化后是$test 对象  public function attribues() 方法中对应的就是表字段。

我这里没有用场景  所以暂时不讲解场景这个功能。 不过大家可以看手册。很容易懂。

这两个图是对相应的

在之后 执行的是 foreache循环  这里的$this 是那个$test 这个对象对象去调用

//例如post 提交过来的数据是这样

$post=[

'a'=>123456,

'b'=>'abcdef'

] 

$test->a=123456

$test->b='abcdef'

所以这个load()方法只是分配post  或者get 发过来的数据,不做验证。

接下来看save();

查看save方法 。

public function save($runValidation = true, $attributeNames = null)
 {
  if ($this->getIsNewRecord()) {  //判断是否是新纪录
   return $this->insert($runValidation, $attributeNames);  //执行这里 之后$this代表的是test 这个模型表。
                        //test 继承的是\yii\mongodb\ActiveRecord 查看insert() 方法 。
    } else {
     return $this->update($runValidation, $attributeNames) !== false; }
   }

insert() 方法中

public function insert($runValidation = true, $attributes = null)
 {
  if ($runValidation && !$this->validate($attributes)) {    //下面的代码分析validate方法 验证rules
   return false;
  }
  $result = $this->insertInternal($attributes);  //保存数据

  return $result;
 }

首先看

//进行数据验证。
public function validate($attributeNames = null, $clearErrors = true)
 {
  if ($clearErrors) {
   $this->clearErrors();
  }

  if (!$this->beforeValidate()) {  //在验证之前首先执行的是 beforValidata 
   return false;
  }

  $scenarios = $this->scenarios();    
  $scenario = $this->getScenario();    //检查是否调用场景
  if (!isset($scenarios[$scenario])) {
   throw new InvalidParamException("Unknown scenario: $scenario");
  }

  if ($attributeNames === null) {
   $attributeNames = $this->activeAttributes(); //返回数组(值为属性的名称)
  }
//$this->getActiveValidators() 验证数据。 读取rules 方法 getActiveValidators() ->getValidators()->createValidators()这里验证rules等信息->createValidator()
foreach ($this->getActiveValidators() as $validator) { 
      $validator->validateAttributes($this, $attributeNames); //获取交集 检查是否有错误 hasError()
     }
   $this->afterValidate();
   return !$this->hasErrors(); }

此时数据验证完毕,之后就保存数据 保存数据这块 就暂时不写了 后续补上。

好了 其中数据验证那一块 大家多看看源码吧。 一遍不行2遍 3遍 多了就懂了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# yii2  # load方法  # load  # save返回值  # 的是  # 暂时不  # 是一个  # 我是  # 好了  # 相关内容  # 是这样  # 我这  # 很容易  # 一遍  # 这两个  # 第二个  # 给大家  # 写了  # 不做  # 这块  # 这篇文章  # 谢谢大家  # 多说  # 多看 


相关文章: 定制建站是什么?如何实现个性化需求?  如何获取PHP WAP自助建站系统源码?  太平洋网站制作公司,网络用语太平洋是什么意思?  如何用美橙互联一键搭建多站合一网站?  如何破解联通资金短缺导致的基站建设难题?  制作网站的公司有哪些,做一个公司网站要多少钱?  广东企业建站网站优化与SEO营销核心策略指南  建站主机选择指南:服务器配置与SEO优化实战技巧  c# Task.ConfigureAwait(true) 在什么场景下是必须的  SQL查询语句优化的实用方法总结  香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何用IIS7快速搭建并优化网站站点?  家具网站制作软件,家具厂怎么跑业务?  建站org新手必看:2024最新搭建流程与模板选择技巧  如何在搬瓦工VPS快速搭建网站?  如何制作网站标识牌,动态网站如何制作(教程)?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  宝塔建站后网页无法访问如何解决?  如何用y主机助手快速搭建网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  自助网站制作软件,个人如何自助建网站?  网站制作员失业,怎样查看自己网站的注册者?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  如何确保FTP站点访问权限与数据传输安全?  如何零基础在云服务器搭建WordPress站点?  如何通过IIS搭建网站并配置访问权限?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何实现建站之星域名转发设置?  如何通过西部建站助手安装IIS服务器?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  建站主机选购指南:核心配置与性价比推荐解析  常州企业网站制作公司,全国继续教育网怎么登录?  常州自助建站工具推荐:低成本搭建与模板选择技巧  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  建站之星导航配置指南:自助建站与SEO优化全解析  建站之星安装路径如何正确选择及配置?  如何快速生成专业多端适配建站电话?  如何高效完成自助建站业务培训?  建站之星在线版空间:自助建站+智能模板一键生成方案  香港服务器如何优化才能显著提升网站加载速度?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  制作网站怎么制作,*游戏网站怎么搭建?  存储型VPS适合搭建中小型网站吗?  如何规划企业建站流程的关键步骤? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。