2012-05-06 7 views
1

私のウェブサイトはyii frameworkです。私はモーダルボックスにサインアップフォームを持っています。私が記入しないでフォームを送信すると、検証エラーはリフレッシュなしでmodal boxに表示されるはずです。しかし、今では他のページにリダイレクトされます。同じページにvalidation errors within the modal boxを表示するにはどうすればよいですか?yiiモーダルボックスフォームバリデーション

これは私がコントローラーにサインアップビュー

<?php 
    $model=new SignupForm; 

    $form=$this->beginWidget('CActiveForm', array(
    'id'=>'signup-form', 
    'enableAjaxValidation'=>true, 
    'action'=>'site/signup' 
)); 
?> 
<?php echo $form->errorSummary($model); ?> 
<?php echo $form->textField($model,'name',array('value'=>'Enter Your Name', 'onclick'=>'javascript:this.value=""', 'onblur'=> 'this.value = (this.value == "") ? "Enter Your Name" : this.value;')); ?><br /> 
<?php echo $form->textField($model,'email',array('value'=>'Enter Your Email ID', 'onclick'=>'javascript:this.value=""', 'onblur'=> 'this.value = (this.value == "") ? "Enter Your Email ID" : this.value;')); ?><br /> 
<?php echo $form->textField($model,'phone',array('value'=>'Telephone', 'onclick'=>'javascript:this.value=""', 'onblur'=> 'this.value = (this.value == "") ? "Telephone" : this.value;')); ?><br /> 
    <!--<input type="text" value="username" onClick="this.value=''"/><br/> 
    <input type="password" value="Password" onClick="this.value=''"/> --> 
    <div class="d-login"><?php echo CHtml::submitButton('Submit'); ?> 
    <?php /*?><input type="image" alt="Login" title="Login" src="<?php echo Yii::app()->request->baseUrl; ?>/images/signup.png"/><?php */?> 
    </div> 
    <?php $this->endWidget(); ?> 

ためのコードを使用しているコードです:

public function actionSignup() 
    { 
     $model=new SignupForm; 

     // if it is ajax validation request 
     if(isset($_POST['ajax']) && $_POST['ajax']==='signup-form') 
     { 
      $model->attributes=$_POST['SignupForm']; 
      echo CActiveForm::validate($model); 
      Yii::app()->end(); 
     } 


     // collect input data 
     if(isset($_POST['SignupForm'])) 
     { 
      $model->attributes=$_POST['SignupForm']; 
      $name=$model->name; 
      $email=$model->email; 
      $phone=$model->phone; 

      $newsletter = new Newsletter(); 


      if($model->validate()) 
      { 

       //insert data 
       $newsletter->varName = $name; 
       $newsletter->varEmail = $email; 
       $newsletter->varPhone = $phone; 
       if($newsletter->save()) { 
       $url = Yii::app()->getBaseUrl(); 
       Yii::app()->getRequest()->redirect($url); 
        } 

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

     } 

答えて

1

あなたは内部モデルを検証したい場合は、AJAXとrenderPartialを使用する必要がありますダイアログモーダルボックス。以下の未テストコードです。(このlinkから)

あなたの意見に/表示するビューファイル内signup.php

<div class="form"> 
    <?php $form=$this->beginWidget('CActiveForm', array(
     'id'=>'signup-form', 
     'enableAjaxValidation'=>false, 
    )); 
    ?> 
    <?php echo $form->errorSummary($model); ?> 
    <?php echo $form->textField($model,'name',array('value'=>'Enter Your Name', 'onclick'=>'javascript:this.value=""', 'onblur'=> 'this.value = (this.value == "") ? "Enter Your Name" : this.value;')); ?><br /> 
    <?php echo $form->textField($model,'email',array('value'=>'Enter Your Email ID', 'onclick'=>'javascript:this.value=""', 'onblur'=> 'this.value = (this.value == "") ? "Enter Your Email ID" : this.value;')); ?><br /> 
    <?php echo $form->textField($model,'phone',array('value'=>'Telephone', 'onclick'=>'javascript:this.value=""', 'onblur'=> 'this.value = (this.value == "") ? "Telephone" : this.value;')); ?><br /> 
    <div class="d-login"> 
     <?php echo CHtml::submitButton('Submit'); ?> 
    </div> 
    <?php $this->endWidget(); ?> 
</div> 
お使いのコントローラで

public function actionSignup() 
    { 
     $model=new SignupForm; 


     if(isset($_POST['SignupForm'])) 
     { 
      $model->attributes=$_POST['SignupForm']; 
      $name=$model->name; 
      $email=$model->email; 
      $phone=$model->phone; 

      $newsletter = new Newsletter(); 
      if($model->save()) 
      { 
       //insert data 
       $newsletter->varName = $name; 
       $newsletter->varEmail = $email; 
       $newsletter->varPhone = $phone; 
       if($newsletter->save()) 
       {    

        if (Yii::app()->request->isAjaxRequest) 
        { 
         echo CJSON::encode(array(
          'status'=>'success', 
          )); 
         exit;    
        } 
        else 
        { 
         $url = Yii::app()->getBaseUrl(); 
         Yii::app()->getRequest()->redirect($url); 
        } 
      } 
     } 

     if (Yii::app()->request->isAjaxRequest) 
     { 
      echo CJSON::encode(array(
       'status'=>'failure', 
       'div'=>$this->renderPartial('signup', array('model'=>$model), true))); 
      exit;    
     } 
     else 
      $this->render('signup',array('model'=>$model,)); 
    } 

そして最後に登録モードボックス

<?php echo CHtml::link('Signup', "", // the link for open the dialog modal 
    array(
     'style'=>'cursor: pointer; text-decoration: underline;', 
     'onclick'=>"{doSignup(); $('#dialogSignup').dialog('open');}"));?> 

<?php 
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(// the dialog 
    'id'=>'dialogSignup', 
    'options'=>array(
     'title'=>'Signup', 
     'autoOpen'=>false, 
     'modal'=>true, 
     'width'=>550, 
     'height'=>470, 
    ), 
));?> 
<div class="divForForm"></div> 

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

<script type="text/javascript"> 
function doSignup() 
{ 
    <?php echo CHtml::ajax(array(
      'url'=>array('site/signup'), 
      'data'=> "js:$(this).serialize()", 
      'type'=>'post', 
      'dataType'=>'json', 
      'success'=>"function(data) 
      { 
       if (data.status == 'failure') 
       { 
        $('#dialogSignup div.divForForm').html(data.div); 
        $('#dialogSignup div.divForForm form').submit(doSignup); 
       } 
       else 
       { 
        window.location.href =".Yii::app()->getBaseUrl()."; 
       } 

      } ", 
      ))?>; 
    return false; 

} 

</script> 
0

サインインモデルで検証規則を定義する必要があります。またはここに登録モデルを貼り付けてください。