1. 程式人生 > >YII用戶註冊和用戶登錄(三)之模型中規則制定和分析

YII用戶註冊和用戶登錄(三)之模型中規則制定和分析

模型 als del 郵箱 收信 com unique mark div

3 模型中規則制定和分析

YII模型主要分為兩類,一個數據模型,處理和數據庫相關的增刪改查。繼承CActiveRecord。還有一個是表單模型,繼承CFormModel。不與數據庫進行交互。操作與數據模型保持一致。

先分析數據模型:

數據模型基本包括四個方法。這裏有兩個須要註意的地方:

1 還記得視圖中有確認password選項嗎?數據庫中沒有這一個字段,不進行處理的話。程序會報錯

處理方法:聲明這樣變量,並將這個變量進行label映射

例如以下:

    public $password2; //
    //設置標簽名字與數據庫字段相應
    public function attributeLabels() {
        return array(
            ‘username‘=>‘用戶名‘,
            ‘password‘=>‘密  碼‘,
            ‘password2‘=>‘確認密碼‘,
            ‘user_sex‘=>‘性  別‘,
            ‘user_qq‘=>‘qq號碼‘,
            ‘user_hobby‘=>‘愛  好‘,
            ‘user_xueli‘=>‘學  歷‘,
            ‘user_introduce‘=>‘簡  介‘,
            ‘user_email‘=>‘郵  箱‘,
            ‘user_tel‘=>‘手機號碼‘,
        );
    }

2 驗證規則制定:

    /*
     * 實現用戶註冊表單驗證
     * 在模型裏邊設置一個方法,定義詳細表單域驗證規則
     */
    public function rules() {
        return array(
            
            array(‘username‘,‘required‘,‘message‘=>‘username必填‘),
           
            //username不能反復(與數據庫比較)
            array(‘username‘, ‘unique‘, ‘message‘=>‘username已經占用‘),
            
            array(‘password‘,‘required‘,‘message‘=>‘密碼必填‘),
            
            //驗證確認密碼password2  要與密碼的信息一致
            array(‘password2‘,‘compare‘,‘compareAttribute‘=>‘password‘,‘message‘=>‘兩次密碼必須一致‘),
            
            //郵箱默認不能為空
            array(‘user_email‘,‘email‘,‘allowEmpty‘=>false,  ‘message‘=>‘郵箱格式不對‘),
            
            //驗證qq號碼(都是數字組成。5到12位之間。開始為非0信息,使用正則表達式驗證)
            array(‘user_qq‘,‘match‘,‘pattern‘=>‘/^[1-9]\d{4,11}$/‘,‘message‘=>‘qq格式不對‘),
            
            //驗證手機號碼(都是數字。13開始,一共同擁有11位)
            array(‘user_tel‘,‘match‘,‘pattern‘=>‘/^13\d{9}$/‘,‘message‘=>‘手機號碼格式不對‘),
            
            //驗證學歷(信息在2、3、4、5之間則表示有選擇,否則沒有),1正則;2範圍限制
            //範圍限制
            array(‘user_xueli‘,‘in‘,‘range‘=>array(2,3,4,5),‘message‘=>‘學歷必須選擇‘),
                        
            //驗證愛好:必選兩項以上(自己定義方法對愛好進行驗證)
            array(‘user_hobby‘,‘check_hobby‘),

            //為沒有詳細驗證規則的屬性,設置安全的驗證規則。否則attributes不給接收信息
            array(‘user_sex,user_introduce‘,‘safe‘),
        );
    }
    
    /*
     * 在當前模型裏邊定義一個方法check_hobby對愛好進行驗證
     */
    function check_hobby(){
        //在這種方法裏邊,我們能夠獲得模型的相關信息
        //$this -> 屬性名;  //調用模型對象的相關屬性信息
        //$this 就是我們在控制器controller裏邊實例化好的模型對象
        
        $len = strlen($this -> user_hobby);
        if($len < 3)
            $this -> addError(‘user_hobby‘,‘愛好必須選擇兩項或以上‘);
    }

還有沒有別的驗證規則?

有的,見下圖:

技術分享


表單模型:主要用於收集用戶信息。

技術分享

整個過程:

技術分享


在組件中的改動:

技術分享


就此OK。


YII用戶註冊和用戶登錄(三)之模型中規則制定和分析