Maison  >  Article  >  développement back-end  >  Explication détaillée de load() et save() dans Yii2

Explication détaillée de load() et save() dans Yii2

小云云
小云云original
2018-01-30 13:58:533409parcourir

Cet article vous présente principalement les informations pertinentes sur load() et save() dans Yii 2. L'article les présente de manière très détaillée à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour que tout le monde puisse apprendre ou utiliser Yii2. qui en a besoin Jetons un coup d'œil avec l'éditeur ci-dessous, j'espère que cela pourra aider tout le monde.

Avant-propos

Cet article vous présente principalement le contenu pertinent sur load() et save() dans Yii2, et le partage pour votre référence et votre étude. allez-y Jetons un coup d’œil à l’introduction détaillée.

La base de données que j'utilise ici est mongo et la base de données est châtaigne :


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;
  }
 }

Voyons ensuite 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); 
  } } 
 } 
}

Image : Le nom du fichier dans la figure 1 est test Après instanciation, c'est l'objet $test Le champ de table correspondant dans la méthode public function attribues() .

Je n’utilise pas de scènes ici, donc je n’expliquerai pas la fonction scène pour l’instant. Mais vous pouvez lire le manuel. Très facile à comprendre.

Ces deux images correspondent

Après cela, la boucle forache est exécutée $this voici l'objet $test à appeler <.>


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

$post=[

&#39;a&#39;=>123456,

&#39;b&#39;=>&#39;abcdef&#39;

] 

$test->a=123456

$test->b=&#39;abcdef&#39;
, cette méthode load() n'attribue donc que les données envoyées par post ou get, sans vérification.

Regardez save() ensuite ;

Regardez la méthode de sauvegarde.


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; }
   }

Méthode insert()


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

  return $result;
 }

Premier coup d'œil à


//进行数据验证。
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(); }
À ce stade, la vérification des données est terminée, puis les données seront enregistrées. La section de sauvegarde des données ne sera pas enregistrée. écrit pour le moment, je l'ajouterai plus tard.

Recommandations associées :


Explication détaillée de la différence entre jQuery.load() et Jsp include

L'application Ajax dans jquery Explication détaillée des exemples de fonctions load()

La différence entre HTML() et Load() de jQuery

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn