注册表单的验证
视图层:register.php
[php] view plaincopyprint?
- <?php
- //使用小物件生成form元素
- $form=$this->beginWidget('CActiveForm');
- ?>
- <!--用户名-->
- <?php echo $form->labelEx($model,'username');?>
- <?php echo $form->textField($model,'username');?>
- <?php echo $form->error($model,'username');?>
- <br>
- <!--密码-->
- <?php echo $form->labelEx($model,'password');?>
- <?php echo $form->passwordField($model,'password');?>
- <?php echo $form->error($model,'password');?>
- <br>
- <!--确认密码-->
- <?php echo $form->labelEx($model,'password2');?>
- <?php echo $form->passwordField($model,'password2');?>
- <?php echo $form->error($model,'password2');?>
- <br>
- <!--邮箱-->
- <?php echo $form->labelEx($model,'email');?>
- <?php echo $form->textField($model,'email');?>
- <?php echo $form->error($model,'email');?>
- <br>
- <!--性别-->
- <?php echo $form->labelEx($model,'sex');?>
- <?php echo $form->radioButtonList($model,'sex',array(1=>'男',2=>'女'),array("separator"=>" "));?>
- <br>
- <!--年级-->
- <?php echo $form->labelEx($model,'grade');?>
- <?php echo $form->dropDownList($model,'grade',array(0=>"--请选择--",1=>"2010级",2=>"2011级",3=>"2012级"));?>
- <?php echo $form->error($model,'grade');?>
- <br>
- <?php echo $form->labelEx($model,'hobby');?>
- <?php echo $form->checkBoxList($model,'hobby',array(1=>"篮球",2=>"足球",3=>"排球"),array("separator"=>" "));?>
- <?php echo $form->error($model,'hobby');?>
- <!--提交-->
- <?php echo CHtml::submitButton('提交');?>
- <?php
- $this->endWidget();
- ?>
model层的代码如下:User.php
[php] view plaincopyprint?
-
<?php
-
-
/*
-
* To change this template, choose Tools | Templates
-
* and open the template in the editor.
-
*/
-
class User extends CActiveRecord{
-
//创建一个模型的对象 静态
-
public $password2;//非数据库的字段,但是在view中需要用到
-
public static function model($className = __CLASS__) {
-
return parent::model($className);
-
}
-
-
//返回当前数据表的名字
-
public function tableName() {
-
//parent::tableName();
-
return '{
{user}}';//这样写可以省略前缀
-
}
-
-
//设置标签的显示名字
-
public function attributeLabels() {
-
return array(
-
"username"=>"姓名",
-
"password"=>"密码",
-
"password2"=>"确认密码",
-
"email"=>"邮箱",
-
"sex"=>"性别",
-
"grade"=>"年级",
-
"hobby"=>"爱好",
-
);
-
}
-
//验证表单域
-
public function rules() {
-
return array(
-
array("username","required","message"=>"用户名不能为空"),
-
-
array("password","required","message"=>"密码不能为空"),
-
-
//验证密码和确认密码
-
array("password2","compare","compareAttribute"=>"password","message"=>"两次密码不一致"),
-
//验证邮箱
-
array("email","email","allowEmpty"=>false,"message"=>"邮箱格式不正确"),
-
-
//验证年级
-
array("grade","in","range"=>array(1,2,3),"message"=>"请选择年级"),
-
-
//验证爱好,使用自定义规则
-
array("hobby","checkHobby"),
-
);
-
}
-
//验证爱好
-
function checkHobby(){
-
$this->hobby;
-
$len= strlen($this->hobby);
-
if($len<3){
-
$this->addError("hobby","爱好至少为2个以上");
-
}
-
}
-
}
-
?>
control层的代码如下:
[php] view plaincopyprint?
- //信息添加 添加显示页面和添加处理使用同一个方法
- public function actionAdd(){
- $user=new User();
- if(isset($_POST['User'])){
- // foreach ($_POST['User'] as $k =>$v){
- // $user->$k=$v;
- // }
- if(is_array($_POST['User']['hobby']))
- $_POST['User']['hobby']= implode(",", $_POST['User']['hobby']);
- //print_r($_POST['User']);
- $user->attributes=$_POST['User'];
- if($user->save()){
- echo 'success';
- }else{
- echo 'error';
- }
- }
- $this->renderPartial("new",array("model"=>$user));
- }
其中,表单的自动验证,在model层实现,表单元素的名称与数据库中的字段名字一致,可设置错误信息进行提示。