乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Yii CModel.rules()方法 、validate預(yù)定義完整列表

       朱啟發(fā) 2014-11-20

      原文地址:http://blog.csdn.net/hy840429/article/details/6725660

      public array rules ()
      {return}
      array 要調(diào)用 validate() 時應(yīng)用的有效性規(guī)則。

      返回屬性的有效性規(guī)則。

      聲明驗證規(guī)則,應(yīng)重寫此方法。 每個規(guī)則是數(shù)組具有以下結(jié)構(gòu):

      array(‘a(chǎn)ttribute list’, ‘validator name’, ‘on’=>’scenario name’, …validation parameters…)

      注:

      *

      attribute list: 指定屬性 (以逗號分隔) 進(jìn)行驗證 ;

      *

      validator name: 指定要使用的驗證程序。
      它可以是方法的一個模型類的一個內(nèi)置的驗證器或驗證程序類 (或其路徑的別名) 名稱的名稱。

      一種驗證方法必須具有以下簽名:

      // $params refers to validation parameters given in the rule

      function validatorName($attribute,$params)

      內(nèi)置的驗證程序是指在 CValidator::builtInValidators 中聲明的驗證程序之一。 驗證程序的類是擴(kuò)展 CValidator 的類。
      *

      on: 應(yīng)執(zhí)行有效性規(guī)則時,此選項指定的情形。
      用逗號分開不同的方案。
      如果未設(shè)置此選項,將在任何情況下應(yīng)用規(guī)則。
      請 方案
      中有關(guān)此選項的更多詳細(xì)信息,參閱。

      * 附加參數(shù)用于初始化相應(yīng)的驗證程序?qū)傩浴?請參閱 individal 驗證器類 API 可能的屬性。

      以下是一些例子:

      array(

      array(‘username’, ‘required’),
      array(‘username’, ‘length’, ‘min’=>3, ‘max’=>12),
      array(‘password’, ‘compare’, ‘compareAttribute’=>’password2′, ‘on’=>’register’),
      array(‘password’, ‘a(chǎn)uthenticate’, ‘on’=>’login’),
      array(‘Price’,'numerical’, ‘integerOnly’=>true),
      );

      預(yù)定義完整列表:

      *

      boolean : CBooleanValidator 的別名, 確保屬性的值是CBooleanValidator::trueValue 或 CBooleanValidator::falseValue .
      *

      captcha : CCaptchaValidator 的別名,確保了特性的值等于 CAPTCHA 顯示出來的驗證碼.
      *

      compare : CCompareValidator 的別名, 確保了特性的值等于另一個特性或常量.
      *

      email : CEmailValidator 的別名,確保了特性的值是一個有效的電郵地址.
      *

      default : CDefaultValueValidator 的別名, 為特性指派了一個默認(rèn)值.
      *

      exist : CExistValidator 的別名, 確保屬性值存在于指定的數(shù)據(jù)表字段中.
      *

      file : CFileValidator 的別名, 確保了特性包含了一個上傳文件的名稱.
      *

      filter : CFilterValidator 的別名, 使用一個filter轉(zhuǎn)換屬性.
      *

      in : CRangeValidator 的別名, 確保了特性出現(xiàn)在一個預(yù)訂的值列表里.
      *

      length : CStringValidator 的別名, 確保了特性的長度在指定的范圍內(nèi).
      *

      match : CRegularExpressionValidator 的別名, 確保了特性匹配一個正則表達(dá)式.
      *

      numerical : CNumberValidator 的別名, 確保了特性是一個有效的數(shù)字.
      *

      required : CRequiredValidator 的別名, 確保了特性不為空.
      *

      type : CTypeValidator 的別名, 確保了特性為指定的數(shù)據(jù)類型.
      *

      unique : CUniqueValidator 的別名, 確保了特性在數(shù)據(jù)表字段中是唯一的.
      *

      url : CUrlValidator 的別名, 確保了特性是一個有效的路徑.

      驗證的實現(xiàn):

      事實上CModel.rules()+CActiveForm.validate的結(jié)合就實現(xiàn)驗證功能了。

      例子:

      【view】

      beginWidget(‘CActiveForm’); ?>

      errorSummary($model); ?> //注1:這里顯示出錯時,報錯的地方

      ……

      endWidget(); ?>

      【control】

      $model=new user;

      if(isset($_POST['user']))

      {

      $model->attributes=$_POST['user'];

      if($model->validate() && $model->save()) //注2:$model->validate()就是在調(diào)用model.rules進(jìn)行驗證

      $this->redirect(array(‘view’,'id’=>$model->id));

      }

      【model】

      class user extends CActiveRecord

      ……

      public function rules()

      {

      // NOTE: you should only define rules for those attributes that

      // will receive user inputs.

      return array(

      array(‘username, password, email’, ‘required’),

      array(‘username, password, email’, ‘length’, ‘max’=>128),

      array(‘id, username, password, email’, ‘safe’, ‘on’=>’search’),

      );

      }

      ……

      要實現(xiàn)更強(qiáng)大復(fù)雜的驗證功能也就在rules()里做文章了。

      有關(guān)用Ajax驗證,會在Ajax專題中具體介紹。當(dāng)然有必要時,也會再加的。

       

       

       

       

      ==================================================

      遇到個很囧的model rules問題(測試create與update的username)

      1.array('username', 'required')
      測試結(jié)果:create 生效(正常), update 生效(正常)

      2.array('username', 'required', 'on' => 'create, update')

      測試結(jié)果:create不生效(不正常), update 生效(正常)

      3.array('username', 'required', 'on' => 'create')
      測試結(jié)果:create不生效(不正常), update 不生效(正常)

      4.array('username', 'required', 'on' => 'update')
      測試結(jié)果:create不生效(正常), update 生效(正常)

       

      ----=====-------=======----------=======---------========------

      缺省 new 出來的 model 實例的 scenario 是 insert 而不是 create ,你應(yīng)該用 $model = new ModelClass('create'); 去試試。

      -------------------------

      怪不得我以前寫 create時候失敗 后來new XXXXX('create')才可以 原來缺省 insert.

       

       

       

       

       

      ===========================================

      1.場景(scenario)多了怎么辦?
      項目中的user model,場景有10幾個:注冊,登錄,修改用戶基本資料,修改用戶附屬資料,修改用戶密碼,修改頭像,修改用戶隱私策略,修改用戶tag,修改用戶興趣,愛好等等.
      這么多場景(scenario)和驗證(validation)交織在一起,覺得很混亂,CModel::rules函數(shù)很難寫
      2.驗證(validation)不能用全局函數(shù)么??這樣的話有很多驗證要重復(fù)去寫
      ------------------------------------------------------------------------
      比如User Model中,有對user_name的validation_rule
      在其他model中,比如用戶好友,博客作者用戶名等Model中,還要重復(fù)的去寫相應(yīng)的驗證規(guī)則
      比如我要在項目中的很多model中寫上規(guī)則
      array('user_name','match','pattern'=>'/^[a-zA-Z0-9_]{4,16}$/u','message'=>'賬號只能由4-16個字母,數(shù)字,下劃線組成'),

      這樣的話比如以后驗證策略變了,要求用戶名只能是10個字符以內(nèi),就比較麻煩,要把項目中所有model中驗證user_name的規(guī)則進(jìn)行修改 

      --------------====================---------------------------==================

      • 盡量不要用Model里面的rules,應(yīng)該用Form里面的rules
      • 可以寫自定義的validation,然后直接 array('user_name','ext.your_validation');

        --------------------------------

        1.據(jù)你所說的意思應(yīng)該是你在每一個功能點上者應(yīng)用了一個場景吧?我想應(yīng)該沒這個必要,設(shè)置場景一般為了區(qū)別于一般情況的驗證,比如注冊需要驗證確認(rèn)密碼字段而其它情況下不需要驗證這個字段,像這種情況就可以把“確認(rèn)密碼”這個字段的驗證指定一個場景而其它的字段默認(rèn)應(yīng)用于所有的場景,不需要每一個能點上應(yīng)用一個場景。
        2.多個模型都要用到的驗證規(guī)則可以自己寫成一個驗證類,然后在各個model的rule中去運用這個類 
        -------------------------------

        Form 是 Form,model 是 model,不同的。

        當(dāng)然,gii 生成的代碼,是省略了 Form,直接拿 model 當(dāng) form 用,自然是 model 的 rules 判斷了。


        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多