核心驗證器(Core Validators)
Yii提供了一系列常用的核心驗證器,主要存在於 yii\validators 命名空間之下。為了避免使用冗長的類名,可以直接用昵稱來指定相應的核心驗證器。 比如可以用 'required' 昵稱代指 yii\validators\RequiredValidator 類,比如:
1 public function rules() 2 { 3 return [ 4 [['email', 'password'], 'required'], 5 ]; 6 }
yii\validators\Validator::builtInValidators 屬性聲明了所有被支持的驗證器昵稱。
public static $builtInValidators = [ 'boolean' => 'yii\validators\BooleanValidator', 'captcha' => 'yii\captcha\CaptchaValidator', 'compare' => 'yii\validators\CompareValidator', 'date' => 'yii\validators\DateValidator', 'default' => 'yii\validators\DefaultValueValidator', 'double' => 'yii\validators\NumberValidator', 'each' => 'yii\validators\EachValidator', 'email' => 'yii\validators\EmailValidator', 'exist' => 'yii\validators\ExistValidator', 'file' => 'yii\validators\FileValidator', 'filter' => 'yii\validators\FilterValidator', 'image' => 'yii\validators\ImageValidator', 'in' => 'yii\validators\RangeValidator', 'integer' => [ 'class' => 'yii\validators\NumberValidator', 'integerOnly' => true, ], 'match' => 'yii\validators\RegularExpressionValidator', 'number' => 'yii\validators\NumberValidator', 'required' => 'yii\validators\RequiredValidator', 'safe' => 'yii\validators\SafeValidator', 'string' => 'yii\validators\StringValidator', 'trim' => [ 'class' => 'yii\validators\FilterValidator', 'filter' => 'trim', 'skipOnArray' => true, ], 'unique' => 'yii\validators\UniqueValidator', 'url' => 'yii\validators\UrlValidator', 'ip' => 'yii\validators\IpValidator', ];
下面詳細介紹每一款驗證器的主要用法和屬性。
一、yii\validators\BooleanValidator 該驗證器檢查輸入是否為一個布爾值。
1 public function rules() 2 { 3 return [ 4 //檢查'data_one'是否為0、1、true、false,當值為0、1的時候無視數據類型 5 ['data_one', 'boolean'], 6 7 //檢查'date_two'是否為布爾類型,即true和false 8 ['data_two', 'boolean', 'trueValue' => true, 'falseValue' => false, 'strict' => true], 9 ]; 10 }
trueValue: 代表真的值。默認為 '1'。
falseValue:代表假的值。默認為 '0'。
strict:要求輸入值是否必須嚴格匹配 trueValue 或 falseValue。默認為 false。
注意:因為通過 HTML 表單傳遞的輸入數據都是字符串類型,所以一般情況下都需要保持 strict 屬性為false。
二、yii\captcha\CaptchaValidator 驗證碼驗證器
該驗證器通常配合 yii\captcha\CaptchaAction 以及 yii\captcha\Captcha 使用,以確保輸入的值與 yii\captcha\Captcha 小部件所顯示的驗證碼相同。
1 return [ 2 //captchaAction 指向用於渲染 CAPTCHA 圖片的 yii\captcha\CaptchaAction 的路由。默認是'site/captcha' 3 //caseSensitive 驗證碼比對是否大小寫敏感,默認是 false 4 //skipOnEmpty 當輸入為空時,是否跳過驗證。默認為false,也就是必須輸入 5 ['verifyCode', 'captcha', 'captchaAction' => 'login/captcha', 'caseSensitive'=>false, 'skipOnEmpty' => false], 6 ];
三、yii\validators\CompareValidator 比較兩個特定輸入值之間的關系是否與 operator 屬性所指定的相同。
1 public function rules() 2 { 3 return [ 4 //檢查'data_one'的值是否與'data_one_repeat'的值相同 5 //不設置 compareAttribute 屬性,默認與目標屬性加上'_repeat'後綴的的屬性比較 6 ['data_one', 'compare'], 7 8 //設置 compareAttribute 屬性後,比較的對象就是設置的目標屬性 9 ['data_two', 'compare', 'compareAttribute' => 'data_three'], 10 11 //compareValue 設置與 data_one 相比較的常量值 12 //當同時設置 compareValue 和 compareAttribute 時,優先使用 compareValue 13 ['data_four', 'compare', 'compareValue' => 10, 'operator' => '>='], 14 ]; 15 }
operator:比較操作符。
==:檢查兩值是否相等。非嚴格模式。
===:檢查兩值是否全等。嚴格模式。
!=:檢查兩值是否不等。非嚴格模式。
!==:檢查兩值是否不全等。嚴格模式。
>:檢查待測目標值是否大於給定被測值。
>=:檢查待測目標值是否大於等於給定被測值。
<:檢查待測目標值是否小於給定被測值。
<=:檢查待測目標值是否小於等於給定被測值。
四、yii\validators\DefaultValueValidator 該驗證器給為空的目標屬性分配默認值,並不進行數據驗證。
1 public function rules() 2 { 3 return [ 4 //如果 data_one 的值為空,那麼就設置為 test 5 ['data_one', 'default' , 'value' => 'test'], 6 //如果 data_two 的值為空,通過回調函數設置值 $attribute是目標屬性,這裡為 data_two 7 ['data_two', 'default', 'value' => function($model,$attribute){ 8 return 'value'; 9 }], 10 ]; 11 }
1 //回調函數的基本用法 2 function foo($model, $attribute) { 3 // ... 計算 $value ... 4 return $value; 5 }
五、yii\validators\NumberValidator 檢查輸入值是否為雙精度浮點數
1 public function rules() 2 { 3 return [ 4 //驗證器 double 等同於 number 5 //檢查data_one 是否是一個數字 6 ['data_one', 'double'], 7 //max 設置上限值 min 設置下限值,都包含界點。不設置則不檢查上下限值 8 ['data_two', 'number', 'max' => 10, 'min' => 5], 9 ]; 10 }
六、yii\validators\EachValidator 驗證數組裡的每個元素是否符合某種規則
1 public function rules() 2 { 3 return [ 4 //驗證數組 data_one 裡的元素都是數值 5 ['data_one', 'each', 'rule' => ['integer']], 6 7 //驗證數組 data_two 裡的元素都是布爾值 8 ['data_two', 'each', 'rule' => ['boolean'],'allowMessageFromRule'=> false,'message'=> '必須都是布爾值'], 9 ]; 10 }
需要驗證的值必須是一個數組。
rule: 通過一個數組指定一個驗證規則。數組的第一個元素是驗證器的類名或者別名,剩余的元素以鍵值對的方式來設置驗證器的屬性配置。
allowMessageFromRule: 是否使用引用驗證器裡返回的錯誤信息,默認為true。如果設置為false,那麼就必須要設置 message 屬性。
注意:如果需要驗證的值不是一個數組,那麼就會認為是驗證失敗,那麼設置的 message 就會返回作為錯誤信息。
七、yii\validators\EmailValidator 檢測輸入的值是否為有效的郵箱地址
1 public function rules() 2 { 3 return [ 4 //驗證email 是否為有效的郵箱地址 5 ['email', 'email'], 6 ]; 7 }
allowName:檢查是否允許帶名稱的電子郵件地址 (e.g. 張三 <[email protected]>)。 默認為 false。
checkDNS:檢查郵箱域名是否存在,且有沒有對應的 A 或 MX 記錄。有的時候該項檢查可能會因為臨時性 DNS 故障而失敗,哪怕它其實是有效的。 默認為 false。
enableIDN:驗證過程是否應該考慮 IDN(internationalized domain names,國際化域名, 也稱多語種域名,比如中文域名)。默認為 false。使用 IDN 驗證功能,請先確保安裝並開啟 intl PHP 擴展,不然會導致拋出異常。