YII框架分析筆記3 表單模型和驗證

2022-03-09 03:59:25 字數 1590 閱讀 9358

表單模型cformmodel絕大部分繼承cmodelcmodel,由於表模型資料不需要持久化,所以主要在驗證操作上。下面以框架腳手架生成的**登入為例說明表單模型。

[php]view plain

copy

//模型中的驗證規則  

public function rules()  

[php]view plain

copy

$model=new loginform;//建立乙個登入表單模型  

$model->attributes=$_post['loginform'];//傳入登入資料  

cmodel->setattributes($values,$safeonly=true)//呼叫cmodel的setter方法  

//返回model中relues中定義的安全資料,經過下面的呼叫流程獲取乙個驗證器集合  

//每個驗證器由cvalidator::createvalidator($rule[1],$this,$rule[0],array_slice($rule,2))  

cmodel->getvalidators()  

->createvalidators()  

->rules()  

cmodel->validate();//遍歷驗證器執行驗證  

驗證器內部實現

表單模型核心部分在驗證上,下面**其實現方式。

yii框架中驗證以獨立元件集合的形式存在,cvalidator是所有驗證器的基類。還是以登入驗證為例。rules方法中包含required、boolean、authenticate三個驗證器

[php]view plain

copy

public static function createvalidator($name,$object,$attributes,$params=array())  

else  

$on=array();  

if(method_exists($object,$name))  

$validator->params=$params;  

if(isset($params['skiponerror']))  

$validator->skiponerror=$params['skiponerror'];  

}  else  

$validator->on=empty($on) ? array() : array_combine($on,$on);  

return $validator;  

}  建立驗證器流程

1、獲取屬性(array $attributes)和使用場景(array $on)

2、判斷驗證器是否存在model中,如果存在建立乙個內聯驗證器cinlinevalidator,如果不存在,執行第3步

3、如果驗證器是框架自帶的匯入自帶驗證器,否則匯入外部驗證器,然後例項化並賦值。

當觸發validate()時候,可能產生的錯誤將被儲存在model中,可以通過呼叫 cmodel::geterrors() 和cmodel::geterror() 提取這些錯誤資訊。

Yii框架表單模型和驗證用法

表單模型cformmodel絕大部分繼承cmodelcmodel,由於表模型資料不需要持久化,所以主要在驗證操作上。下面以框架腳手架生成的 登入為例說明表單模型。ehheq 模型中的驗證規則 public function rules model new loginform 建立乙個登入表單模型 m...

YII框架分析筆記1 YII執行流程

yii整體執行流程直觀,具體由以下步驟 1 程式入口檔案index.php載入yii框架引導程式 bootstrap 檔案yii.php,載入配置檔案以及其他自定義配置。2 yii.php中yii類繼承了yiibase,主要封裝框架的一些通用方法,比如自動載入 建立元件 核心類路徑對映 記錄日誌以及...

YII框架分析筆記7 掛件widget

widget好處是方面重用和靈活移動。cwidget是所有的widge父類,同時它又是是cbasecontroller的子類,cwidget提供了類似ccontroller中的一些方法,但render 方法渲染的時候不帶layout,而且渲染的時候 this指得是cwidget物件,而不是ccont...