免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Yii CModel.rules()方法 、validate預(yù)定義完整列表

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

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

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

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

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

注:

*

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

*

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

一種驗(yàn)證方法必須具有以下簽名:

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

function validatorName($attribute,$params)

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

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

* 附加參數(shù)用于初始化相應(yīng)的驗(yàn)證程序?qū)傩浴?請(qǐng)參閱 individal 驗(yàn)證器類(lèi) 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 顯示出來(lái)的驗(yàn)證碼.
*

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

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

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

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

file : CFileValidator 的別名, 確保了特性包含了一個(gè)上傳文件的名稱(chēng).
*

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

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

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

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

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

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

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

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

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

驗(yàn)證的實(shí)現(xiàn):

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

例子:

【view】

beginWidget(‘CActiveForm’); ?>

errorSummary($model); ?> //注1:這里顯示出錯(cuò)時(shí),報(bào)錯(cuò)的地方

……

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)行驗(yà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’),

);

}

……

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

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

 

 

 

 

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

遇到個(gè)很?chē)宓?strong style="margin: 0px; padding: 0px;">model rules問(wèn)題(測(cè)試create與update的username)

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

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

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

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

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

 

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

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

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

怪不得我以前寫(xiě) create時(shí)候失敗 后來(lái)new XXXXX('create')才可以 原來(lái)缺省 insert.

 

 

 

 

 

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

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

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

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

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

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

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

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

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


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
PesterCat : Web Testing Tutorial
電池壽命估計(jì)
學(xué)習(xí)如何使用AngularJs 1.3中的新form表單特性 | xgfe
手把手教你使用CNN進(jìn)行交通標(biāo)志識(shí)別(已開(kāi)源)
成功element ui省市縣三級(jí)聯(lián)動(dòng)及默認(rèn)值設(shè)置
thinkphp的前置操作
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服