2012-02-29 65 views
0

我想用Ajax驗證方法驗證我的表單。因此,我已經爲此更改了視圖文件的代碼。Ajax驗證正在Yii中進行部分驗證

<div class="form"> 
<?php $form=$this->beginWidget('CActiveForm', array(
     'id'=>'customers-form', 
     'enableAjaxValidation'=>true, 
     'enableClientValidation'=>true, 
     'focus'=>array($model,'firstname,lastname,gender,email,contact_no,address,state,country'), 
)); ?> 

    <p class="note">Fields with <span class="required">*</span> are required.</p> 

    <?php echo $form->errorSummary($model); ?> 
    <div class="row"> 
    <?php echo $form->labelEx($model,'firstname'); ?> 
    <?php echo $form->textField($model,'firstname',array('size'=>60,'maxlength'=>80)); ?> 
    <?php echo $form->error($model,'firstname'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($model,'lastname'); ?> 
    <?php echo $form->textField($model,'lastname',array('size'=>60,'maxlength'=>80)); ?> 
    <?php echo $form->error($model,'lastname'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($model,'gender'); ?> 
    <?php echo $form->radioButtonList($model,'gender',array('Male'=>'Male','Female'=>'Female'),array(
     'labelOptions'=>array('style'=>'display:inline;padding-right:10px'),'separator'=>'',));?> 
    <?php echo $form->error($model,'gender'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($model,'email'); ?> 
    <?php echo $form->textField($model,'email',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($model,'email'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($model,'contact_no'); ?> 
    <?php echo $form->textField($model,'contact_no',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($model,'contact_no'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($model,'address'); ?> 
    <?php echo $form->textField($model,'address',array('size'=>60,'maxlength'=>120)); ?> 
    <?php echo $form->error($model,'address'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($model,'state'); ?> 
    <?php echo $form->textField($model,'state',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($model,'state'); ?> 
    </div> 

    <div class="row"> 
    <?php echo $form->labelEx($model,'country'); ?> 
    <?php echo $form->textField($model,'country',array('size'=>45,'maxlength'=>45)); ?> 
    <?php echo $form->error($model,'country'); ?> 
    </div> 

    <div class="row buttons"> 
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?> 
    </div> 

<?php $this->endWidget(); ?> 

</div><!-- form --> 

我所做的規則,這種模式是這樣的

public function rules() 
    { 
    // NOTE: you should only define rules for those attributes that 
    // will receive user inputs. 
    return array(
     array('firstname,lastname,gender,email,contact_no,address,state,country', 'required'), 
     array('firstname, lastname', 'length', 'max'=>80), 
    ); 
    } 

所有代碼後,我來看看,所有的領域都出現驗證以正常的方式,而是通過Ajax驗證打算時唯一的Firstname, Lastname, Email顯示ajax validation.Rest字段沒有顯示任何ajax驗證。有人告訴我我在這裏做錯了什麼?任何幫助和建議將是非常可觀的。 編輯 這裏是正在處理Ajax驗證

protected function performAjaxValidation($model) 
    { 
    if(isset($_POST['ajax']) && $_POST['ajax']==='customers-form') 
    { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 
    } 
+0

你也可以說是處理這種形式的控制器代碼? – 2012-02-29 13:17:53

+0

Thanks @ bool.dev您的快速回復。我已更新控制器的代碼。 – NewUser 2012-02-29 13:23:19

+0

Thanks @ bool.dev試圖解決這個問題。我已經得到了解決方案。 – NewUser 2012-02-29 13:40:39

回答

0

只要使用這個模型的actionCreate()

public function actionCreate() 
    { 
    $model=new Customers; 

    // Uncomment the following line if AJAX validation is needed 
    // $this->performAjaxValidation($model); 

    if(isset($_POST['Customers'])) 
    { 
     if(Yii::app()->getRequest()->getIsAjaxRequest()) 
     { 
     echo CActiveForm::validate(array($model)); 
     Yii::app()->end(); 
     } 
     $model->attributes=$_POST['Customers']; 
     $valid = $model->validate(); 
     if($valid) 
     { 
     $model->save(); 
     $this->redirect(array('view','id'=>$model->id)); 
     } 
    } 

    $this->render('create',array(
     'model'=>$model, 
    )); 
    } 

的視圖文件的其餘部分將是相同控制器代碼上面提出的問題。

0

我都試過了,你可以按照這個:

public function actionCreate() 
{ 
$model=new Main; 

if(isset($_POST['ajax'])) 
{ 
echo CActiveForm::validate($model); 
Yii::app()->end(); 
} 
if(isset($_POST['Main'])) 

在視圖:

$form=$this->beginWidget('CActiveForm', array(
'id'=>'main-form', 
'enableAjaxValidation'=>true, 
'htmlOptions'=>array('enctype'=>'multipart/form-data'),)) 

「真正需要」