表單模型cformmodel絕大部分繼承cmodelcmodel,由於表模型資料不需要持久化,所以主要在驗證操作上。下面以框架腳手架生成的**登入為例說明表單模型。
ehheq//模型中的驗證規則
public function rules()
$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三個驗證器
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
ehheq
$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() 提取這些錯誤資訊
ps:小編在這裡推薦一款本站的php格式化美化的排版工具幫助大家在以後的php程式設計中進行**排版:
php****格式化美化工具:
YII框架分析筆記3 表單模型和驗證
表單模型cformmodel絕大部分繼承cmodelcmodel,由於表模型資料不需要持久化,所以主要在驗證操作上。下面以框架腳手架生成的 登入為例說明表單模型。php view plain copy 模型中的驗證規則 public function rules php view plain cop...
yii高階框架 表單小部件驗證
控制器 model 檢視層 控制器model層 namespace frontend models use yii base model class b extends model message 郵箱格式不正確 手機號 phone match pattern 1 0 9 message 手機號格式...
動態表單驗證和TP框架裡面的ajax
動態驗證的操作方法 function yz else else 在框架裡用ajax來實現輸入代號顯示姓名 打到模板是用上面的 function ming 表單 代號 js document ready function e type post datatype text success functi...