Yii核心驗證器api詳解_php執行個體

來源:互聯網
上載者:User
本文執行個體講述了Yii核心驗證器api。分享給大家供大家參考,具體如下:

核心驗證器 Core Validators

前言

Yii 提供了一系列常用的核心 validators, 你可在
yii\validators namespace 中找到. 不用使用長的驗證器類名, 你可以使用別名代替他們.

例如, 你可以使用別名 required 代替 yii\validators\RequiredValidator 類:

<?phppublic function rules(){  return [    [['email', 'password'], 'required'],  ];}?>

這個 yii\validators\Validator::$builtInValidators 屬性生命所有支援的驗證器的別名.

接下來, 我們將講解每種核心驗證器的用法.

1. boolean 對錯值

<?php[  // 檢查是否 "selected" 是 0 或 1, 不管資料類型  ['selected', 'boolean'],  // 檢查是否 "deleted" 是一個 boolean 類型, 只能是 true 或則 false  ['deleted', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true],]?>

上面檢測是否是一個bool值.

trueValue: 代表true時的值. 預設為 '1'.
falseValue: 代表 false 時的值. 預設為 '0'.
strict: 是否輸入框中的值必須匹配 設定的 trueValue 和 falseValue. 預設為 false.

注意: 因為資料提交通過HTML形式都是字元創, 一般你需要設定 strict 屬性為 false.

2. captcha 驗證碼

<?php[  ['verificationCode', 'captcha'],]?>

這個驗證器通常和
yii\captcha\CaptchaAction 以及
yii\captcha\Captcha 一起使用以確保輸入的是相同的驗證碼 通過 CAPTCHA 組件.
caseSensitive: 是否驗證碼需要區分大小寫. 預設為 false.
captchaAction: 預設的驗證碼的 CAPTCHA action 產生 CAPTCHA image的路徑. 預設為 'site/captcha'.
skipOnEmpty: 輸入為空白的時候是否跳過驗證. 預設false, 即 input 輸入是必須的.

3. compare 比較

<?php[  // 驗證是否 "password" 屬性和 "password_repeat"是否相等  ['password', 'compare'],  // 驗證 age >= 30  ['age', 'compare', 'compareValue' => 30, 'operator' => '>='],]?>

這個驗證器比較指定的輸入值和另一個值確保他們之間使用指定的操作符.

compareAttribute: 屬性的名字即將會和誰比較.當驗證器被用來驗證一個屬性的時候, 他會和屬性名稱字相同 但帶有尾碼 _repeat的屬性相比較. 例如, 如果要驗證的屬性名稱是 password, 那麼預設對比的屬性名稱就是 password_repeat 你可以指定你想要的值.
compareValue: 一個和輸入值比較的常量值. 當 property 和 compareAttribute 屬性被同時指定的時候, 這個值將優先.
operator: 比較的操作符. 預設是 ==, 即輸入值和 compareAttribute 或 compareValue 值相等的時候才會成功.
支援下面這些操作符: ==、===、!=、!==、>、>=、<、<=。

4. date 日期

<?php[  [['from_date', 'to_date'], 'date'],]?>

這個驗證器檢查輸入的值是一個日期date, 時間time 或者datetime 以一個合適的形式. 可選的,他能轉換輸入值成為一個UNIX時間戳記儲存在一個通過timestampAttribute 指定的屬性裡.

format: 這個 date/time 是 http://php.net/manual/en/datetime.createfromformat.php 中聲明的所有支援的格式

如果這個值沒有設定, 他會自動取值 Yii::$app->formatter->dateFormat.
timestampAttribute: 屬性名稱用來儲存轉換將輸入的日期或時間. 也可以是相同的屬性名稱作為被驗證過的. 如果是這種情況, 原始的值將會被時間戳記重寫. 你可以看看 "如何處理日期選取器 DatePicker" 用例子.
http://www.yiiframework.com/doc-2.0/widget-jui#datepicker-date-input

如果輸入的是可選的,你也可能要添加一個預設值濾波器除了日期驗證,以確保空輸入儲存為NULL。否則你可能最終得到的日期像日期選取器的輸入欄位在0000-00-00 或 您的資料庫1970-01-01.

<?php[  [['from_date', 'to_date'], 'default', 'value' => null],  [['from_date', 'to_date'], 'date'],],?>

5.default 預設值

<?php[  // 設定 "age" 為 null 如果他是空的  ['age', 'default', 'value' => null],  // 設定 "country" 為 "USA" 如果他是空的  ['country', 'default', 'value' => 'USA'],  // 分配 "from" 和 "to" 分別加3天和6天, 如果他們是空的話  [['from', 'to'], 'default', 'value' => function ($model, $attribute) {    return date('Y-m-d', strtotime($attribute === 'to' ? '+3 days' : '+6 days'));  }],]?>

這個驗證器不驗證資料. 當他們為空白的時候.分配給屬性值。

value: 表單的預設值 函數原型如下,

<?phpfunction foo($model, $attribute) {  // ... 組裝 $value ...  return $value;}?>

6. double 浮點值

<?php[  // 檢查 "salary" 是一個 double 數字  ['salary', 'double'],]?>

相當於一個數字驗證器:

max: 數字上限,沒設定不檢查
min: 數字下線,沒設定不檢查

7. email 郵箱驗證

<?php[  // 檢查郵箱是一個有效 "email"地址  ['email', 'email'],]?>

allowName: 檢查名字是否允許在郵箱中出現 (e.g. John Smith ). 預設為 false.
checkDNS,是否檢查電子郵件的網域名稱是否存在,是否有任何一個A或MX記錄。請注意,這可能檢查由於臨時DNS問題失敗,即使電子郵件地址實際上是有效。預設為false。
enableIDN,驗證過程是否應考慮到IDN(國際化網域名稱)。預設為false。需要注意的是,為了使用IDN驗證您必須安裝並啟用國際PHP擴充,或異常將被拋出。

8. exist 是否存在

<?php[  // a1 需要在 屬性列中存在 "a1" 這個好像預設就有啊  ['a1', 'exist'],  // a1 存在,但它的值將使用A2來檢查是否存在  ['a1', 'exist', 'targetAttribute' => 'a2'],  // a1 和 a2 需要同時存在, 他們都將接收錯誤資訊  [['a1', 'a2'], 'exist', 'targetAttribute' => ['a1', 'a2']],  // a1 和 a2 需要同時存在, 只有 a1 將接收錯誤資訊  ['a1', 'exist', 'targetAttribute' => ['a1', 'a2']],  // a1 需要存在 通過檢測a2 和 a3 (用 a1 的值)  ['a1', 'exist', 'targetAttribute' => ['a2', 'a1' => 'a3']],  // a1 需要存在. 如果 a1是一個數組, 那麼每個元素都必須存在.  ['a1', 'exist', 'allowArray' => true],]?>

這個驗證器檢查輸入的值能否被找到在在對應的表的列值裡,他只會在 Active Record model 模型的屬性裡起作用.

他支援驗證單列或多列

targetClass: 用來尋找輸入值驗證的 Active Record 類名. 如果未設定, 預設使用當前設定的模型類.
targetAttribute: 應該用於驗證輸入值的存在在targetClass的屬性的名稱。如果沒有設定,將使用目前正在驗證的屬性的名稱。可以使用陣列來驗證多列的存在的同時。數組的值是將被用於驗證存在的屬性,而數組鍵是其值要驗證的屬性。如果鍵和值都是一樣的,你可以指定值.
filter: additional filter to be applied to the DB query used to check the existence of the input value. This can be a string or an array representing the additional query condition (refer to yii\db\Query::where() on the format of query condition), or an anonymous function with the signature function ($query), where $query is the Query object that you can modify in the function.
allowArray: 是否允許輸入的值是一個array.預設 false. 若果屬性是 true 而且輸入是一個 array, 那麼熟這裡的每一個元素都必須存在在指向的目標列裡. 注意這個屬性不能被設定成true 如果你設定驗證多列通過設定 targetAttribute 為一個 array.

9. file 檔案驗證

<?php[  // 檢查 "primaryImage" 上傳的檔案格式是 PNG, JPG 或者 GIF  // the file size must be less than 1MB  ['primaryImage', 'file', 'extensions' => ['png', 'jpg', 'gif'], 'maxSize' => 1024*1024],]?>

檢查是否是一個有效上傳檔案。

extensions: 允許上傳的檔案類型列表.他可以是一個數組 或者是一個以逗號分割的字串(如. "gif, jpg"). 副檔名不區分大小寫,預設為 null, 意味著所有的副檔名是允許的.
mimeTypes: 允許上傳的檔案資源的媒體類型。他可以是一個數組 或者是一個以逗號或空格分割的字串 (如. "image/jpeg, image/png"). 不區分大小寫,預設為 null, 意味著所有的副檔名是允許的.
minSize: 上傳檔案的最小位元組數 未設不做判斷.
maxSize: 上傳檔案的最大位元組數 未設不做判斷.
maxFiles: 最大的上傳檔案數 預設為 1, 意味著只能上傳單個檔案對於單個檔案上傳框. 如果大於 1, 那麼 input必須是一個 array 包含至多 maxFiles 數量的上傳檔案.
checkExtensionByMimeType: 是否檢查檔案的副檔名. 如果由MIME類型檢查所產生的擴充不同於上傳的副檔名,該檔案將被認為是無效的。預設值為true,意思進行這樣的檢查。
FileValidator 和 yii\web\UploadedFile 一起使用. .

檔案上傳請參考:http://www.yiiframework.com/doc-2.0/guide-input-file-upload.html

10. filter 過濾

<?php[  // 去掉 "username" 和 "email" 輸入空格 跳過數組驗證  [['username', 'email'], 'filter', 'filter' => 'trim', 'skipOnArray' => true],  // 驗證正常 "phone" 輸入  ['phone', 'filter', 'filter' => function ($value) {    // 驗證正確性手機代碼    return $value;  }],]?>

這個驗證器驗證不了資料. 相反的, it applies a filter on the input value and assigns it back to the attribute being validated.

filter: 一個php回呼函數定義一個filter. 他可能是一個全域函數的名字, 一個匿名函數等等. 函數的原型一定是<?php function ($value) { return $newValue; } ?>這個屬性必須設定.

skipOnArray: 當輸入只是一個數組的時候是否跳過.預設是 false. 請注意,如果過濾器無法處理數組輸入,您應該將此屬性設定為true。否則,可能會發生一些PHP錯誤.

小提示: 去空格直接用trim驗證.

小提示: 部分封裝可以直接使用系統函數如intval:

<?php['property', 'filter', 'filter' => 'boolval'],['property', 'filter', 'filter' => 'intval'],?>

11. image 圖片

<?php[  // 檢查 "primaryImage" 是否是一個有效圖片 且大小合適  ['primaryImage', 'image', 'extensions' => 'png, jpg',    'minWidth' => 100, 'maxWidth' => 1000,    'minHeight' => 100, 'maxHeight' => 1000,  ],]?>

檔案驗證器的擴充:

minWidth: 最小的寬度 不設無限制.
maxWidth: 最大的寬度 不設無限制.
minHeight: 最小的高度 不設無限制.
maxHeight: 最大的高度 不設無限制.

12. in 在那一個數組裡面的值

<?php[  // 檢查 "level" 是 1, 2 或 3  ['level', 'in', 'range' => [1, 2, 3]],]?>

檢查輸入的值是否存在於給定的系列值的列表中.

range: 給定範圍值的列表.
strict: 輸入值和給定值之間的比較結果是否應嚴格(的類型和值必須相同)。預設為false。
not: 驗證結果是否應該被反轉。預設為false。當此屬性設定為true,驗證檢查,輸入的值不能是給定列表的值中.
allowArray: 是否允許輸入值是一個數組。如果這是真的,並輸入值是一個數組,數組中的每個元素必須值的給定列表中找到,或驗證會失敗。

13. integer 整型驗證

<?php[  // 檢查 "age" 是一個整型值  ['age', 'integer'],]?>

max: 上限 不設不檢查.
min: 下限 不設不檢查..

14. match 正則匹配檢查

<?php[  // 檢查 "username" 以字母開頭,並且只包含文字字元  ['username', 'match', 'pattern' => '/^[a-z]\w*$/i']]?>

輸入值指定的Regex匹配驗證檢查.

pattern: 輸入值必須匹配的規則. 屬性必須設定,否則將會拋出異常.
not: 是否反轉驗證結果. 預設 false.

15. number 數字檢查

<?php[  // 檢查 "salary" 是一個數字  ['salary', 'number'],]?>

相當於double驗證器.

max: 上限 不設不檢查.
min: 下限 不設不檢查.

16. required 是否為空白檢查

<?php[  // 檢查 "username" 和 "password" 不是空的  [['username', 'password'], 'required'],]?>

該驗證器阻止使用者提交空的表單資料.

requiredValue: 應該輸入的值. 如果未設 意味著輸入值 不應該為空白.
strict: 驗證一個值時是否應該檢查資料類型. 預設false.當 requiredValue未設定時,如果這個屬性是 true, 驗證器會檢查輸入值不嚴格null;如果改屬性false,驗證器將使用一個鬆散的規則來確定一個值是空的或不. 當 requiredValue設定了,輸入和requiredValue之間的比較也將檢查資料類型,如果此屬性為true。

17. safe 標記輸入是安全屬性

<?php[  // 標記 "description" 是一個 safe 的屬性  ['description', 'safe'],]?>

這個驗證器不會執行資料驗證.相反, 它是用來標記的屬性是一個安全屬性(我猜作用是不會進行字元轉義吧)。

18. string 字串驗證

<?php[  // 檢查 "username"是一個 string 而且長度在 4 和 24 之間  ['username', 'string', 'length' => [4, 24]],]?>

這個驗證器檢查輸入的值是一個字串且長度在確定的值的範圍裡。

length: 指定待驗證的字串的長度. 可以指定以下形式:
一個整數: 字串的精確長度;
單個數組元素: 輸入的最小長度 (e.g. [8]). 必須超過或等於這個數
兩個數組元素: 輸入的最小長度和最大長度 (e.g. [8, 128]).
min: 輸入字串的最小長度 未設不限制.
max: 輸入字串的最大長度 未設不限制..
encoding: 輸入字串的編碼 未設預設 UTF-8.

19. trim 去空格

<?php[  // 去掉 "username" 和 "email" 兩邊的空格  [['username', 'email'], 'trim'],]?>

不進行資料驗證 只進行去空格 如果屬性是一個數組 將會自動忽略此過濾.

20. unique 唯一性驗證

<?php[  // a1 需要是在由“a1”屬性工作表示的列中的唯一  ['a1', 'unique'],  // a1 必須是唯一的,但列a2將用於檢查的a1值的唯一性  ['a1', 'unique', 'targetAttribute' => 'a2'],  // a1和a2的需要是唯一的,並且它們都將收到錯誤訊息  [['a1', 'a2'], 'unique', 'targetAttribute' => ['a1', 'a2']],  // a1和a2的需要是唯一的,只有a1將收到錯誤訊息  ['a1', 'unique', 'targetAttribute' => ['a1', 'a2']],  // a1需要通過檢查的兩個a2和a3的唯一性(使用a1的值)是唯一的  ['a1', 'unique', 'targetAttribute' => ['a2', 'a1' => 'a3']],]?>

這驗證檢查,如果輸入的值是表列中的唯一。它僅適用於活動記錄模型的屬性。它支援驗證對任何單個列或多個列。

targetClass: 應該是被用於驗證尋找輸入值的活動記錄類的名字。如果沒有設定,將要使用的類目前正在驗證該模型的.
targetAttribute: 應該用來驗證輸入值的唯一性在targetClass的屬性的名稱。如果沒有設定,將使用目前正在驗證的屬性的名稱。可以使用陣列來驗證多列的唯一性的同時。數組的值是將被用於驗證唯一性的屬性,而數組鍵是其值要驗證的屬性。如果鍵和值都是一樣的,你可以指定的值。
filter: a額外的過濾器被應用到用於檢查輸入值的唯一性的資料庫查詢。這可以是一個字串或代表附加查詢條件的數組(參考 yii\db\Query::where() 查詢條件的格式), 或者是一個匿名函數像: function ($query), 其中$query是你可以在函數修改查詢對象。
http://www.yiiframework.com/doc-2.0/yii-db-query.html#where()-detail

21. url 地址驗證

<?php[  // 檢查 "website" 是一個有效 URL. 前置 "http://" 到 "website" 屬性  // 如果它不具有一個URI模式  ['website', 'url', 'defaultScheme' => 'http'],]?>

validSchemes: 一個數組指定URI方案應被認為有效。預設為['HTTP','HTTPS'],意思是HTTP和HTTPS URL被認為是有效。
defaultScheme: 預設URI方案要預先考慮到輸入,如果它不具有方案的一部分。預設為null,意味著不修改輸入值。
enableIDN:驗證是否應考慮到IDN(國際化網域名稱)。預設為false。需要注意的是,為了使用IDN驗證您必須安裝並啟用國際PHP擴充,否則異常將會被拋出。

更多關於Yii相關內容感興趣的讀者可查看本站專題:《Yii架構入門及常用技巧總結》、《php優秀開發架構總結》、《smarty模板入門基礎教程》、《php物件導向程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》

希望本文所述對大家基於Yii架構的PHP程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.