How to use single form to collect data for two or more models (CActiveForm and Ajax Validation edition)

You are viewing revision #7 of this wiki article.
This is the latest version of this article.
You may want to see the changes made in this revision.

« previous (#6)

With Yii you can use one CActiveForm for collecting data for two or more models with ajax validation and client validation.

According this article you can also create a form with ajax validation for both models.

You have two models $a and $b.

create.php

<?php $form = $this->beginWidget('CActiveForm', array(
    'id'=>'user-form',
    'enableAjaxValidation'=>true,
)); ?>

<?php echo $form->errorSummary(array($a,$b)); ?>

<div class="row">
    <?php echo $form->labelEx($a,'firstName'); ?>
    <?php echo $form->textField($a,'firstName'); ?>
    <?php echo $form->error($a,'firstName'); ?>
</div>
<div class="row">
    <?php echo $form->labelEx($b,'lastName'); ?>
    <?php echo $form->textField($b,'lastName'); ?>
    <?php echo $form->error($b,'lastName'); ?>
</div>

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

controller:

public function actionCreate()
{
    $a=new User;
    $b=new Info;

    $this->performAjaxValidation(array($a,$b));
    if(isset($_POST['User'],$_POST['Info']))
    {
        // populate input data to $a and $b
        $a->attributes=$_POST['User'];
        $b->attributes=$_POST['Info'];
        
        // validate BOTH $a and $b
        $valid=$a->validate();
        $valid=$b->validate() && $valid;
        
        if($valid)
        {
            // use false parameter to disable validation
            $a->save(false);
            $b->save(false);
            
            $this->redirect('index');
        }
    }
    $this->render('create',array('a'=>$a,'b'=>$b));
}

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

Thats all, now you have form with 2 models and ajaxValidation.

Links

16 0
33 followers
Viewed: 72 454 times
Version: Unknown (update)
Category: How-tos
Written by: RusAlex
Last updated by: Darwin Wen
Created on: Jul 20, 2011
Last updated: 12 years ago
Update Article

Revisions

View all history

Related Articles