YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查。继承CActiveRecord。还有一个是表单模型,继承CFormModel。不与数据库进行交互。操作与数据模型保持一致。
先分析数据模型:
数据模型基本包括四个方法。这里有两个须要注意的地方:
1 还记得视图中有确认password选项吗?数据库中没有这一个字段,不进行处理的话。程序会报错
处理方法:声明这样变量,并将这个变量进行label映射
例如以下:
public $password2; //
//设置标签名字与数据库字段相应
public function attributeLabels() {
return array(
'username'=>'用户名',
'password'=>'密 码',
'password2'=>'确认密码',
'user_sex'=>'性 别',
'user_qq'=>'qq号码',
'user_hobby'=>'爱 好',
'user_xueli'=>'学 历',
'user_introduce'=>'简 介',
'user_email'=>'邮 箱',
'user_tel'=>'手机号码',
);
}2 验证规则制定:
/*
* 实现用户注冊表单验证
* 在模型里边设置一个方法,定义详细表单域验证规则
*/
public function rules() {
return array(
array('username','required','message'=>'username必填'),
//username不能反复(与数据库比較)
array('username', 'unique', 'message'=>'username已经占用'),
array('password','required','message'=>'密码必填'),
//验证确认密码password2 要与密码的信息一致
array('password2','compare','compareAttribute'=>'password','message'=>'两次密码必须一致'),
//邮箱默认不能为空
array('user_email','email','allowEmpty'=>false, 'message'=>'邮箱格式不对'),
//验证qq号码(都是数字组成。5到12位之间。開始为非0信息,使用正則表達式验证)
array('user_qq','match','pattern'=>'/^[1-9]\d{4,11}$/','message'=>'qq格式不对'),
//验证手机号码(都是数字。13開始,一共同拥有11位)
array('user_tel','match','pattern'=>'/^13\d{9}$/','message'=>'手机号码格式不对'),
//验证学历(信息在2、3、4、5之间则表示有选择,否则没有),1正则;2范围限制
//范围限制
array('user_xueli','in','range'=>array(2,3,4,5),'message'=>'学历必须选择'),
//验证爱好:必选两项以上(自己定义方法对爱好进行验证)
array('user_hobby','check_hobby'),
//为没有详细验证规则的属性,设置安全的验证规则。否则attributes不给接收信息
array('user_sex,user_introduce','safe'),
);
}
/*
* 在当前模型里边定义一个方法check_hobby对爱好进行验证
*/
function check_hobby(){
//在这种方法里边,我们能够获得模型的相关信息
//$this -> 属性名; //调用模型对象的相关属性信息
//$this 就是我们在控制器controller里边实例化好的模型对象
$len = strlen($this -> user_hobby);
if($len < 3)
$this -> addError('user_hobby','爱好必须选择两项或以上');
}还有没有别的验证规则?
有的,见下图:
表单模型:主要用于收集用户信息。
整个过程:
在组件中的改动:
就此OK。