1. 程式人生 > >yii2數據驗證

yii2數據驗證

enable del ror rom tor 則無 user trap ava

1. 客戶端驗證

yii根據ARrules()中的驗證規則生成相應的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;

}

註:有些規則無法使用客戶端驗證,如uniqueexist等。

rules()驗證規則的錯誤信息中引用屬性標簽名以及用戶輸入的值:

[‘username‘, ‘unique‘, ‘on‘ => ‘register‘, ‘message‘ => ‘{attribute}"{value}"已被占用!‘]

{attribute}:屬性標簽名稱;{value}:用戶輸入的值。

yii2數據驗證