了解知识
CActiveForm 用于快速生成表单,支持ajax 验证,对与比较复杂的验证最好是自己生成表单,写验证方法。
CActiveForm 实际上是对CHtml 类的封装,它与CHtml 不同的地方是CActiveForm 提供了验证机制,有三种:
 
服务器端/客户端/ajax 验证。
 
常用代码如下:
在Controller 中:
 
   public function actionForm(){
   
        $post=new Post();
        //ajax 数据验证
        if(isset($_POST['ajax'])&&$_POST['ajax']==='post'){
            echo CActiveForm::validate($post);
            Yii::app()->end();
        }
       
        if(isset($_POST['Post'])){
            $post->attributes=$_POST['Post'];
            if($model->validate()){ //服务器端验证,
            //如果当前model是表格,可以省略这一步;如果是自定义的验证表单,这一步不可省略
           
                if($post->save()){
                    echo "保存成功!";
                }
            }
        }
        $this->render('form',array('model'=>$post));
    }
 
在view 中:
  
    $form=$this->beginWidget('CActiveForm',array(
        'id'=>'post',  //这里与controller 中的ajax对应
        'enableAjaxValidation'=>true, //是否是ajax 验证
        //'enableClientValidation'=>true,  //是否客户端验证,生成js
        //'action'=>'/post/form',
        //'method'=>'post'
    ));
   
 
    echo CHtml::errorSummary($model);
   
   
    echo $form->labelEx($model,'title');
    echo $form->textField($model,'title');
    echo $form->error($model,'title'); //error一定要写上,要不不会触发ajax验证 
   
     echo $form->labelEx($model,'subject');
     echo $form->textField($model,'subject',array('size'=>60,'maxlength'=>128,'class'=>'span4'));
     echo $form->error($model,'subject');
   
    
     echo $form->labelEx($model,'content');
     echo $form->textArea($model,'content',array('rows'=>6,'cols'=>'50'));
     echo $form->error($model,'content');
   
    
     echo $form->labelEx($model,'gender');
     $model->gender=0; //默认选中0 'female';这个默认值最好是在控制器里设定 
     echo $form->radioButtonList($model,'gender',array('1'=>'Male','0'=>'Female'),
        array('separator'=>' ','labelOptions'=>array('class'=>''))
        );
   
     echo $form->error($model,'gender');
   
   
    echo $form->labelEx($model,'fav');
    echo $model->name=array(1,2,3); //默认选中的值 
    echo $form->checkBoxList($model,'fav',
        array('1'=>'Football','2'=>'Music','3'=>'Game','4'=>'basketball'),
        array('sepatator'=>' ','labelOptions'=>array('class'=>'mylabel'))
    );
    echo $form->error($model,'fav');
 
    
    echo $form->lableEx($model,'job');
    echo $form->dropDownList($model,'job',$jobs_data);
    echo $form->error($model,'job');
 
   
    echo $form->labelEx($model,'isVIP');
    echo $form->checkBox($model,'isVIP');
    echo $form->error($model,'isVIP');
 
    
   if($model->verifyCode){
       echo $form->labelEx($model,'verifyCode');
        $this->widget('CCaptcha');
         echo $form->textField($model,'verifyCode');
       
Please enter the letters as they are shown in the image above.
           
Letters are not case-sensitive.
       
 
        echo $form->error($model,'verifyCode');
   
    }
   
    echo CHtml::submitButton($model->isNewRecord?'Create':'Save');  
    $this->endWidget();
      
      ?>
   
  注:如果想学习更多关于CActiveForm 的相关知识,可以参考CActiveForm 的API 手册。
标签: Yii框架
扩展知识