Yii2中的load()和save()詳解

來源:互聯網
上載者:User
本文主要給大家介紹關於Yii 2中的load()和save()的相關資料,文中通過範例程式碼介紹的非常詳細,對大家學習或者使用yii2具有一定的參考學習價值,需要的朋友們下面跟著小編來一起看看吧,希望能協助到大家。

前言

本文主要給大家介紹的是關於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 傳過來的參數 第二個參數 是一個Null 字元串 '';//  $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(); }

此時資料驗證完畢,之後就儲存資料 儲存資料這塊 就暫時不寫了 後續補上。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.