摘要:好比注冊功能模塊,手機號郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。需求分析使用框架自帶的在不刷新頁面的情況下驗證手機號郵箱唯一性。相關資料表單驗證問題注冊時驗證手機號唯一
序言
驗證唯一性很重要,說不上用得很普及,但是也必須要有。好比注冊功能模塊,手機號、郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。那么如何使用Yii2自帶的targetClass驗證唯一性呢?使頁面刷新的可能很多人都會,要是不刷新頁面直接觸發targetClass驗證的應該就少些了吧!不會的也不必苦惱,不必擔心,因為我寫這篇文章的目的就是要告訴你怎么通過頁面不刷新的方式直接觸發targetClass驗證其手機號、郵箱唯一性。
需求分析1、使用Yii2框架自帶的targetClass在不刷新頁面的情況下驗證手機號、郵箱唯一性。
效果圖這是點擊下一步的時候在頁面沒刷新的情況下出現的驗證提示“手機號已經注冊”。
1、配置model,我以注冊SignupFrom 的model為例,rules里的代碼如下:
public function rules() { return [ ["t_mobile", "filter", "filter" => "trim"], ["t_mobile", "required"], //targetClass 不會自己調用Ajax驗證,提交表單后才會觸發 ["t_mobile", "unique", "targetClass" => "loginmodelsUser", "message" => "手機號已經注冊。"], [["t_mobile"],"match","pattern"=>"/^[1][358][0-9]{9}$/"], ["t_password","required"], ["t_re_password","required"], ["t_re_password","compare","compareAttribute"=>"t_password","message"=>"兩次密碼輸入不一致。"], ["t_password", "string", "min" => 6], ["t_re_password", "string", "min" => 6], ["company_id", "trim"], ["t_realname", "trim"], ["company_id", "required"], ["t_realname", "required"], ["company_id", "string", "min" => 2, "max" => 255], ["t_realname", "string", "min" => 2, "max" => 255], ["code", "required"], //驗證碼驗證,model自定義驗證的寫法,也分享給大家了 ["code", function ($attribute, $params) { $cd=SmsCode::find()->where(["mobile"=>$this->t_mobile,"code"=>$this->$attribute])->one(); if(!empty($cd->code) && (strtolower($this->$attribute) == strtolower($cd->code))){ return true; }else{ $this->addError("code","驗證碼錯誤。"); } }], ]; }
注釋:郵箱和手機號的寫法是一樣的,區別是pattern的驗證規則,如是郵箱驗證就換成郵箱的正則匹配符。
2、在Controller里加上如下一段Ajax提交表單驗證的代碼
//Ajax表單驗證 if((Yii::$app->request->isAjax && $model->load($post))){ Yii::$app->response->format=Response::FORMAT_JSON; return ActiveForm::validate($model); }
注意:這段代碼要放在控制器注冊方法的最前面,原因很簡單,不可能你所有的操作都完成了再去走驗證吧?
3、View層的Ajax驗證觸發配置
from表單代碼如下:
"signup?id=reg", "id" => "login-form", "validateOnBlur"=>false,//關閉失去焦點驗證 "enableAjaxValidation"=>true, //開啟Ajax驗證 "enableClientValidation"=>false //關閉客戶端驗證 ]); ?>設置用戶名
Enter any username and password.= $form->field($model, "t_mobile",["inputOptions"=>["class"=>"form-control form-control-solid placeholder-no-fix","placeholder"=>"手機號"]])->label("") ?>= Html::Button("下一步", ["class" => "btn blue uppercase", "name" => "login-button","id"=>"next"]) ?> = Html::a("登錄",["/site/login"],["class" => "forget-password"]) ?>
注釋:(1)、enableAjaxValidation和enableClientValidation的配置必須是enableAjaxValidation為true,enableClientValidation為false。除此之外id也必須要有。
(2)、上面的點擊下一步按鈕我使用Button,原因是我的注冊功能不是一步走完的,需要好幾步,好幾個頁面才能完成注冊,要實現全部無刷新,不能直接使用submitButton提交表單,得自己寫Ajax提交。但是如果你們做的注冊功能是一個頁面實現的話,那就可以直接用submitButton提交表單了。以上的配置Ajax驗證已經生效,提交表單頁面不刷新的情況下也能直接觸發targetClass驗證,不必擔心驗證唯一性的時候頁面會刷新了。
1、只model里配置targetClass唯一性驗證,在View層開啟enableAjaxValidation和關閉enableClientValidation驗證,沒有在Controller里邊加上文章中我所說的Ajax提交表單驗證的代碼,導致Ajax驗證不成功。那段代碼必須要加的。
相關資料1、YII2表單驗證問題:注冊時ajax驗證手機號唯一 :http://www.yiichina.com/question/241
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21616.html
摘要:好比注冊功能模塊,手機號郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。需求分析使用框架自帶的在不刷新頁面的情況下驗證手機號郵箱唯一性。相關資料表單驗證問題注冊時驗證手機號唯一 序言 驗證唯一性很重要,說不上用得很普及,但是也必須要有。好比注冊功能模塊,手機號、郵箱注冊這些,肯定是要驗證其的唯一性的,重復了登錄就會混亂。那么如何使用Yii2自帶的targetClass驗證唯...
摘要:必須值驗證屬性字段名必填值提示信息說明的別名確保了特性不為空郵箱驗證說明的別名確保了特性的值是一個有效的電郵地址正則驗證字段名正則表達式提示信息字段名正則表達式提示信息正則取反說明的別名確保了特性匹配一個正則表達式網址說明的別名確保了特性是 required : 必須值驗證屬性 [[字段名],required,requiredValue=>必填值,message=>提示信息]; #說明...
摘要:開始使用郵箱配置好了之后,我們就可以開始使用了,首先我們來修改一下我們的導航欄,因為我們想實現的就是我們常??吹降脑趯Ш綑诘挠覀鹊淖院偷卿洶粹o。 原文來自: https://jellybool.com/post/programming-with-yii2-integrating-user-regi... 本來打算昨晚寫的這篇教程,但是忙著約會去了,所以現在補上吧。 上一篇...
閱讀 2486·2021-11-15 18:14
閱讀 1711·2021-10-14 09:42
閱讀 3746·2021-10-11 10:58
閱讀 3939·2021-10-09 09:44
閱讀 2410·2021-09-26 09:55
閱讀 2430·2021-09-24 10:38
閱讀 2025·2021-09-04 16:48
閱讀 3268·2021-09-02 15:21