表單模型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...