Yii 表單驗證規則---總結

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驗證時就只驗證usernameemailphone這三個字段了,不會影響驗證碼。

 

Number:數字驗證,加上'integerOnly'=>true,表示只能是整數,maxmin分別表示最大最小值,tooBigtooSmall分別是超過最大值和低於最小值時的錯誤提示信息

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()前須要將複選框的值處理成字符串

相關文章
相關標籤/搜索