Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung von Load() und Save() in Yii2

Detaillierte Erklärung von Load() und Save() in Yii2

小云云
小云云Original
2018-01-30 13:58:533451Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Informationen zu Load() und Save() in Yii 2 vor. Der Artikel stellt sie ausführlich anhand von Beispielcode vor. Es hat einen gewissen Referenz-Lernwert, damit jeder yii2 Friends lernen oder verwenden kann Wer braucht es? Werfen wir einen Blick mit dem unten stehenden Editor. Ich hoffe, er kann allen helfen.

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich den relevanten Inhalt zu Load() und Save() in Yii2 vor und teilt ihn ohne weitere Umschweife mit Ihnen Machen Sie weiter. Werfen wir einen Blick auf die ausführliche Einführung.

Die Datenbank, die ich hier verwende, ist Mongo und die Datenbank ist Chestnut:


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

Sehen wir uns die nächsten 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); 
  } } 
 } 
}
Bild: Der Dateiname in Abbildung 1 ist test. Nach der Instanziierung ist es das entsprechende Tabellenfeld in der

-Methode. public function attribues()

Ich verwende hier keine Szenen, daher werde ich die Szenenfunktion vorerst nicht erklären. Aber Sie können das Handbuch lesen. Sehr leicht zu verstehen.

Diese beiden Bilder entsprechen

Danach wird die Forache-Schleife ausgeführt. Hier wird das $test-Objekt aufgerufen 🎜>


, daher ordnet diese Methode „load()“ nur die per Post oder Get gesendeten Daten ohne Überprüfung zu.
//例如post 提交过来的数据是这样

$post=[

'a'=>123456,

'b'=>'abcdef'

] 

$test->a=123456

$test->b='abcdef'

Sehen Sie sich als nächstes save() an.

Sehen Sie sich die Speichermethode an.


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()-Methode


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

  return $result;
 }
Schauen Sie sich zuerst


an. Zu diesem Zeitpunkt ist die Datenüberprüfung abgeschlossen, und dann werden die Daten nicht gespeichert vorerst geschrieben, ich werde es später hinzufügen.
//进行数据验证。
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(); }

Verwandte Empfehlungen:


Detaillierte Erläuterung des Unterschieds zwischen jQuery.load() und Jsp enthalten

Ajax-Anwendung in jquery Detaillierte Erläuterung der Beispiele für die Funktion „load()“

Der Unterschied zwischen HTML() und Load() von jQuery

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von Load() und Save() in Yii2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn