2012-02-29 14 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の検証を表示しています。フィールドのRESTは、AJAX検証を表示していません。誰かが私がここで間違っていると教えてくれますか? 編集 ここではただ、モデルのactionCreate(でこれを使用

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

あなたがこのフォームを処理しているコントローラのコードを表示することができます? –

+0

あなたのクイック返信のための@ bool.devありがとうございます。私はコントローラのコードを更新しました。 – NewUser

+0

この問題を解決しようとしてくれてありがとう@ bool.dev。私は解決策を持っています。 – NewUser

答えて

0

Ajaxの検証を処理しているコントローラ用のコードです)

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'),)) 

「真必要とされている」

関連する問題