yii2數據驗證
1. 客戶端驗證
yii根據AR類rules()中的驗證規則生成相應的Javascript驗證代碼。通過設置參數enableClientValidation的值來決定是否啟用
客戶端驗證,默認為true,有以下3種方法來設置該參數的值。
(1)在視圖文件ActiveForm中對整個form進行設置:
<?php $form = ActiveForm::begin([
‘enableClientValidation‘ =>true
]); ?>
(2)在視圖文件ActiveField中對單個field進行設置:
<?= $form->field($model, ‘username‘, [‘enableClientValidation‘=>false])->label(‘用戶名
(3)在AR類的rules()函數中設置:
[‘username‘, ‘yii\validators\StringValidator‘, ‘min‘ => 3, ‘max‘ => 30, ‘enableClientValidation‘ => true, ‘on‘ => ‘register‘]
優先級:(2)>(1)>(3)
2. 服務器端驗證
(1)$model->validate():
根據rules()中定義的驗證規則對所有數據進行驗證,驗證通過返回true,否則返回false並在頁面上顯示錯誤信息。
(2)$model->save()
默認調用$model->validate(),驗證通過則直接進行數據庫操作,返回true,否則不進行數據庫操作,返回false,將錯誤
信息存儲在$model->errors中。若已調用$model->validate(),可以通過傳參避免在save()方法中重復驗證數據:$model->save(false)。
3. Ajax驗證
通過設置參數enableAjaxValidation的值來決定是否啟用ajax驗證,默認為false。
客戶端設置(兩種方法):
(1)在視圖文件ActiveForm中對整個form進行設置:
<?php $form = ActiveForm::begin([
‘enableAjaxValidation‘ =>true
]); ?>
(2)在視圖文件ActiveField中對單個field進行設置:
<?= $form->field($model, ‘username‘, [‘enableAjaxValidation‘=>false])->label(‘用戶名‘) ?>
服務器端處理:
if(Yii::$app->request->isAjax) {
$res = \yii\bootstrap\ActiveForm::validate($model);
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $res;
}
註:有些規則無法使用客戶端驗證,如unique、exist等。
在rules()驗證規則的錯誤信息中引用屬性標簽名以及用戶輸入的值:
[‘username‘, ‘unique‘, ‘on‘ => ‘register‘, ‘message‘ => ‘{attribute}"{value}"已被占用!‘]
{attribute}:屬性標簽名稱;{value}:用戶輸入的值。
yii2數據驗證