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

You are viewing revision #3 of this wiki article.
This version may not be up to date with the latest version.
You may want to view the differences to the latest version.

next (#4) »

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']))
    {
        $a->attributes=$_POST['User'];
        $b->attributes=$_POST['Info'];
        if($a->save() && $b->save())
            $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.

16 0
33 followers
Viewed: 72 443 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