Home > Article > Backend Development > Yii framework form model and validation usage, yii framework form model_PHP tutorial
This article describes the Yii framework form model and verification usage with examples. Share it with everyone for your reference, the details are as follows:
Most of the form model CFormModel inherits CModelCModel. Since the table model data does not need to be persisted, it is mainly used for verification operations. The following uses the website login generated by the framework scaffolding as an example to illustrate the form model.
//模型中的验证规则 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();//遍历验证器执行验证
Verifier internal implementation
The core part of the form model is verification, and its implementation will be discussed below.
Validation in the YII framework exists in the form of a collection of independent components, and CValidator is the base class of all validators. Let’s take login verification as an example. The rules method contains three validators: required, boolean, and 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; }
Create validator process
1. Get attributes (array $attributes) and usage scenarios (array $on)
2. Determine whether the validator exists in the model. If it exists, create an inline validator CInlineValidator. If it does not exist, perform step 3
3. If the validator is the one that comes with the framework, import the built-in validator. Otherwise, import the external validator, then instantiate and assign a value.
When validate() is triggered, possible errors will be stored in the model. These error information can be extracted by calling CModel::getErrors() and CModel::getError()
PS:The editor here recommends a PHP formatting and beautifying typesetting tool on this website to help you code typesetting in future PHP programming:
PHP code online formatting and beautification tool: http://tools.jb51.net/code/phpformat
Readers who are interested in more Yii-related content can check out the special topics on this site: "Introduction to Yii Framework and Summary of Common Techniques", "Summary of Excellent PHP Development Framework", "Basic Tutorial for Getting Started with Smarty Templates", "php Date and Time" Usage Summary", "php object-oriented programming introductory tutorial", "php string (string) usage summary", "php mysql database operation introductory tutorial" and "php common database operation skills summary"
I hope this article will be helpful to everyone’s PHP program design based on the Yii framework.