您好,登錄后才能下訂單哦!
開發Web應用有一個很重要的原則,就是不要相信任何輸入的數據,在使用之前必須要進行有效性檢查,否則很有可能會引發各種安全性問題。Yii 2當然也不會忽略這個問題,提供了校驗器這一有力的工具,該工具可同時提供客戶端和服務器端的數據校驗。
在Model內,重載rules()接口,配置每個字段的規則,如下(以LoginForm為例):
public function rules() |
每一行中,前面是字段名稱,最后一個元素是規則的名稱。這些規則最終是通過“校驗器”來完成校驗的。當然內置的校驗器肯定不能夠全部滿足需求,因此Yii 2在根據規則名稱創建校驗器的時候,會首先檢查該Model中是否有跟規則名稱相同的函數,如果有,則校驗規則的時候就直接用該函數來完成校驗,譬如上面代碼中的“validatePassword”規則,在LoginForm中就有接口:
public function validatePassword($attribute, $params) |
Yii 2中,校驗器存放于vendor\yiisoft\yii2\validators目錄下,有如下內置校驗器(這些校驗器沒有全部都用過,這里列出來功能,細節待用到的時候再研究):
boolean | 檢測輸入值是否為boolean類型 |
captcha | 檢測輸入的校驗碼是否正確,這個需要與yii\captcha\CaptchaAction一起使用 |
compare | 與指定值進行比較,確認兩者是否符合比較條件(如:>=、=、<=),譬如注冊時會要求輸入兩次密碼,要比較這兩次輸入的密碼是否相同 |
date | 檢測輸入值是否為date類型 |
datetime | 檢測輸入值是否為datetime類型 |
time | 檢測輸入值是否為time類型 |
default | 這個實際上不是一個校驗器,是當某個屬性為空時,提供默認值用的 |
double | 檢測輸入值是否為double類型 |
each | 對輸入的一組數據進行校驗 |
檢測輸入值是否為email地址 | |
exist | 判斷輸入的值是否在數據庫中存在,常用于檢查某個值在外鍵中是否存在 |
file | 檢測輸入值是否為文件 |
filter | 將輸入值轉換為另一個值,它實際上不是個校驗器。 |
p_w_picpath | 檢測輸入值是否為圖片 |
in | 檢測輸入值是否在指定的列表中 |
integer | 檢測輸入值是否為integer類型 |
match | 使用正則表達式檢查輸入值 |
required | 檢測輸入值是否為空 |
safe | 標志輸入的字段是否可信,Yii對Model的每個字段都要求必須要有校驗器,但是有時候有些字段的確不需要,譬如主鍵ID。 |
string | 檢測輸入值是否為string類型 |
trim | 這實際上是一個轉換器,去除掉輸入的前后空格 |
unique | 檢測輸入值在表中是否唯一 |
url | 檢測輸入值是否為URL |
ip | 檢測輸入值是否為IP地址 |
參考文獻:
1、http://www.cnblogs.com/yhdsir/p/5181938.html
新建一個文件:
?php
namespace common\helps;
use yii\validators\Validator;
class ArrayValidator extends Validator
{
publicfunction validateAttribute($model, $attribute)
{
if (!is_array($model->$attribute)) {
$this->addError($model, $attribute, $attribute . '必須是一個數組');
}
}
}
使用的時候:
publicfunction rules()
{
return [
...
['kind_ids','common\helps\ArrayValidator'], // 自定義驗證
...
];
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。