Filter: 過濾,'filter'=>'trim',表示去空格php
Required:必須的,表示不能爲空ios
Match: 匹配正則,須要和pattern一塊兒使用,定義正則表達式,'pattern'=>'/^\w{6,20}$/',web
Unique:驗證數據惟一性,在註冊時用到的比較多,這裏須要注意的是,在rules規則裏面定義的惟一性驗證,只有在服務器端才能驗證,若是想要在表單頁面顯示,須要開啓」enableAjaxValidation」=>ture;ajax
例如:正則表達式
<?php $form = ActiveForm::begin([bootstrap
'id'=>'sign-form',數組
//'enableAjaxValidation' => true,//啓用ajax驗證,將屬性值發送到服務器端進行驗證並返回結果,默認爲false服務器
'enableClientValidation' => true,//啓用客戶端驗證,默認值爲true,關閉後表單無js驗證app
'options'=>['action'=>'usermessage/signform', 'method'=>'post', 'enctype'=>'multipart/form-data']]); ?>yii
這裏須要注意的是,在這裏啓用的話,ajax驗證是做用於全部的屬性的,因此,還有另外一種開啓方式,在某一個field裏面開啓
例如:<?= $form->field($model, 'username', ['enableAjaxValidation'=>true])->textInput() ?>,這樣就單獨做用於username屬性了。
要想實現表單ajax驗證惟一性,後臺還要一個ajax判斷:把如下代碼複製到控制器實例化模型層的下邊
$model->load(Yii::$app->request->post());
if (Yii::$app->request->isAjax)
{
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return \yii\bootstrap\ActiveForm::validate($model);
}
在有數據提交時,最好先執行$model->load(Yii::$app->request->post()); 操做,不要作多餘的處理,而後判斷ajax,不然ajax驗證的時候可能會報錯500。若是有驗證碼,這裏就會有另外一個問題:return \yii\bootstrap\ActiveForm::validate($model);這個驗證的是全部的屬性,而驗證碼執行validate後就會從新生成,那麼在表單提交時咱們進行數據有效性驗證時就會報錯,解決方式:\yii\bootstrap\ActiveForm::validate()這個方法實際上是有兩個參數的,$model,$attributes,咱們能夠指定ajax驗證某一些特定的屬性,寫法是:\yii\bootstrap\ActiveForm::validate($model, ['username', 'email', 'phone']);這樣ajax驗證時就只驗證username,email,phone這三個字段了,不會影響驗證碼。
Number:數字驗證,加上'integerOnly'=>true,表示只能是整數,max,min分別表示最大最小值,tooBig和tooSmall分別是超過最大值和低於最小值時的錯誤提示信息
Compare:比較,用於兩個屬性之間的比較,'compareAttribute'=>'password',表示與password比較
In:和range連用,定義範圍,表示屬性值必須在這個範圍內,一般用於驗證某些固定值
Email:郵箱驗證
File:文件驗證 extensions能夠定義上傳文件的類型
Captcha:驗證碼驗證,須要定義生成驗證碼的方法,'captchaAction'=>'usermessage/captcha',usermessage表示控制器名,captcha表示方法名
能夠在控制器層定義一個actions方法添加captcha方法:
/**
* 生成驗證碼的方法
*/
public function actions() {
parent::actions();
return [
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
//'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
'maxLength' => 3,
'minLength' => 3
],
];
}
每個驗證均可以添加應用場景:’on’=>’register’;
在控制器層實例化模型層
$model = new Usermessage();
$model->setScenario('register'); 定義使用應用場景爲register
在模型層須要定義場景做用的對象
/**
* 定義驗證場景
*/
public function scenarios()
{
return [
'register' => ['username', 'password', 'repassword', 'age', 'sex', 'phone','email'],
'login' => ['username', 'password','age', 'sex', 'phone','email'],
];
}
而後在對應的驗證規則後面限定應用場景’on’=>’register’;
當表單驗證時,爲在做用場景之內的參數能夠不受驗證規則的限制
添加入庫:複選框因提交過來後是一個數組,因此在執行save()前須要將複選框的值處理成字符串