Yii架構表單模型和驗證用法,yii架構表單模型
本文執行個體講述了Yii架構表單模型和驗證用法。分享給大家供大家參考,具體如下:
表單模型CFormModel絕大部分繼承CModelCModel,由於表模型資料不需要持久化,所以主要在驗證操作上。下面以架構腳手架產生的網站登入狀態例說明表單模型。
//模型中的驗證規則public function rules(){ return array( array('username, password', 'required'), array('rememberMe', 'boolean'), array('password', 'authenticate'), );}
$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()){ if(is_string($attributes)) $attributes=preg_split('/[\s,]+/',$attributes,-1,PREG_SPLIT_NO_EMPTY); if(isset($params['on'])) { if(is_array($params['on'])) $on=$params['on']; else $on=preg_split('/[\s,]+/',$params['on'],-1,PREG_SPLIT_NO_EMPTY); } else $on=array(); if(method_exists($object,$name)) { $validator=new CInlineValidator; $validator->attributes=$attributes; $validator->method=$name; if(isset($params['clientValidate'])) { $validator->clientValidate=$params['clientValidate']; unset($params['clientValidate']); } $validator->params=$params; if(isset($params['skipOnError'])) $validator->skipOnError=$params['skipOnError']; } else { $params['attributes']=$attributes; if(isset(self::$builtInValidators[$name])) $className=Yii::import(self::$builtInValidators[$name],true); else $className=Yii::import($name,true); $validator=new $className; foreach($params as $name=>$value) $validator->$name=$value; } $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代碼線上格式化美化工具:http://tools.jb51.net/code/phpformat
更多關於Yii相關內容感興趣的讀者可查看本站專題:《Yii架構入門及常用技巧總結》、《php優秀開發架構總結》、《smarty模板入門基礎教程》、《php日期與時間用法總結》、《php物件導向程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》
希望本文所述對大家基於Yii架構的PHP程式設計有所協助。
http://www.bkjia.com/PHPjc/1133127.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1133127.htmlTechArticleYii架構表單模型和驗證用法,yii架構表單模型 本文執行個體講述了Yii架構表單模型和驗證用法。分享給大家供大家參考,具體如下: 表單模型...