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。