Validar Formularios Tabulados

Buenas Tardes.

Estoy realizando una aplicación con el framework y necesito ayuda para validar datos tabulados.

Lo que sucede es que estoy utilizando 3 veces el mismo modelo, y necesito validar cada modelo de manera independiente. Y lo que pasa es que al cargar el primer modelo con sus respectivo campos, el segundo modelo (modelConyugeCliente) al momento de validar me dice que ya se encuentra validado debido a que valida los campos del modelo y no de los formularios tabulados.

No se si me explico bien, soy nuevo en Yii y es mi primer proyecto.

//controlador


  


public function actionCreate()

        {

                $model=new Cliente;

                $modelReferenciaCliente=new Cliente;

                $modelAvalCliente=new Cliente;

                $modelConyugeCliente=new Cliente;

                $modelBanco=new BancoCliente;

                $modelAntecedentesLaborales=new AntecedenteLaboral;




                // Uncomment the following line if AJAX validation is needed

                //$this->performAjaxValidation($model);


                if(isset($_POST['Cliente'], $_POST['BancoCliente'], $_POST['AntecedenteLaboral']))

                {

                        $exito0=false;

                        $exito1=false;

                        $exito2=false;

                        $model->attributes=$_POST['Cliente'];

                        $modelBanco->attributes=$_POST['BancoCliente'];

                        $modelConyugeCliente->attributes=$_POST['Cliente'][1];

                        $modelAvalCliente->attributes=$_POST['Cliente'][2];

                        $modelReferenciaCliente->attributes=$_POST['Cliente'][3];                       

                        

                        


                        if($model->id_tipopersona==1){

                            $model->setScenario('clienteNuevoNatural');

                        }                        

                        if($model->id_tipopersona==2){

                            $model->setScenario('clienteNuevoJuridico');

                        }

                        

                        if($_POST["conyuge"]==1){

                            $modelConyugeCliente->setScenario('validarConyuge');

                        }

                      

                        if($model->validate()){

                            $transaction=Yii::app()->db->beginTransaction();

                            $exito0=$model->save(false);

                                if($modelBanco->validate()){

                                    $idCliente=$model->primaryKey;

                                    $modelBanco->id_cliente=$idCliente;

                                    $exito1=$modelBanco->save(false);

                                    if($modelAntecedentesLaborales->validate()){

                                        $idCliente=$model->primaryKey;

                                        $modelAntecedentesLaborales->id_cliente=$idCliente;

                                        $exito2=$modelAntecedentesLaborales->save(false);

                                    }else{

                                        $transaction->rollBack();

                                    } 

                                }else{

                                    $transaction->rollBack();

                                }                                          

                            

                        }                     

             

                        if($exito0==true && $exito1==true && $exito2==true ){

                                    $transaction->commit();

                                    $this->redirect(array('view','id'=>$model->id_cliente));

                                }

                                

                }


                $this->render('create',array(

                        'model'=>$model,

                        'modelBanco'=>$modelBanco,

                        'modelAntecedentesLaborales'=>$modelAntecedentesLaborales,

                        'modelReferenciaCliente'=>$modelReferenciaCliente,

                        'modelAvalCliente'=>$modelAvalCliente,

                        'modelConyugeCliente'=>$modelConyugeCliente,                    

                ));

        }



//vista


<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

        'id'=>'cliente-form',

        'enableAjaxValidation'=>false,

)); ?>


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


        <?php echo $form->errorSummary($model); ?>

        <fieldset>

            <legend><?php echo $form->labelEx($model,'id_tipopersona'); ?></legend>

        <div class="row">

                

                <?php echo $form->radioButtonList($model,'id_tipopersona', $opcionesTipoPersona,array('class'=>'sexoCliente')); ?>

                <?php echo $form->error($model,'id_tipopersona'); ?>

        </div>            

        </fieldset>


        <fieldset>

            <legend>Datos Clientes</legend>

        <div class="row">

                <?php echo $form->labelEx($model,'codigo'); ?>

                <?php echo $form->textField($model,'codigo',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'codigo'); ?>

        </div>





        <div class="row">

                <?php echo $form->labelEx($model,'seg_nombre'); ?>

                <?php echo $form->textField($model,'seg_nombre',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'seg_nombre'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'ape_paterno'); ?>

                <?php echo $form->textField($model,'ape_paterno',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'ape_paterno'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'ape_materno'); ?>

                <?php echo $form->textField($model,'ape_materno',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'ape_materno'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'fec_nacimiento'); ?>

                <?php $this->widget('zii.widgets.jui.CJuiDatePicker',array(

                        'attribute'=>'fec_nacimiento',

                        'model'=>$model,

                        'language' => 'es',

                        // additional javascript options for the date picker plugin

                        'options'=>array(

                            'showAnim'=>'fold',

                        ),

                        'options'=>array(

                            'dateFormat'=>'dd/mm/yy'

                        ),           

                    )); 

                ?>

                <?php echo $form->error($model,'fec_nacimiento'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'direccion'); ?>

                <?php echo $form->textField($model,'direccion',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'direccion'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'dir_postal'); ?>

                <?php echo $form->textField($model,'dir_postal',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'dir_postal'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'email'); ?>

                <?php echo $form->textField($model,'email',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'email'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'telefono'); ?>

                <?php echo $form->textField($model,'telefono',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'telefono'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'celular'); ?>

                <?php echo $form->textField($model,'celular',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'celular'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'nacionalidad'); ?>

                <?php echo $form->textField($model,'nacionalidad',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'nacionalidad'); ?>

        </div>            

        <div class="row">

                <?php echo $form->labelEx($model,'id_separacionbienes'); ?>

                <?php $this->widget('ext.select2.ESelect2',array(

                  'model'=>$model,

                  'attribute'=>'id_separacionbienes',

                  'data'=>$opcionesSeparacionBienes,

                )); ?> 

                <?php echo $form->error($model,'id_separacionbienes'); ?>

        </div>            

        <div class="row">

                <?php echo $form->labelEx($model,'nombre'); ?>

                <?php echo $form->textField($model,'nombre',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'nombre'); ?>

        </div>            

        <div class="row">

                <?php echo $form->labelEx($model,'id_sexo'); ?>

                <?php echo $form->radioButtonList($model,'id_sexo', $opcionesSexo,array('class'=>'sexoCliente')); ?>

                <?php echo $form->error($model,'id_sexo'); ?>

        </div>            

        <div class="row">

                <?php echo $form->labelEx($model,'rut'); ?>

                <?php echo $form->textField($model,'rut',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'rut'); ?>

        </div>            

        <div class="row">

                <?php echo $form->labelEx($model,'id_comuna'); ?>       

                <?php $this->widget('ext.select2.ESelect2',array(

                  'model'=>$model,

                  'attribute'=>'id_comuna',

                  'data'=>$opcionesComuna,

                )); ?> 

                <?php echo $form->error($model,'id_comuna'); ?>         


        </div>            

        </fieldset>

        <fieldset>

            <legend>Datos Conyuge</legend>

        <div class="row">

                <?php echo CHtml::label('Tiene Conyuge?',''); ?>

                <?php echo CHtml::radioButtonList('conyuge',$conyuge, $opcionesBasicasSiNo,array('class'=>'conyuge'),array('separator'=>'')); ?>

        </div>

            <div class="formularioConyuge" style="display: none">

                <div class="row">

                        <?php echo $form->labelEx($model,'id_conyuge'); ?>

                        <?php echo $form->textField($model,'id_conyuge'); ?>

                        <?php echo $form->error($model,'id_conyuge'); ?>

                </div> 

                <div class="row">

                        <?php echo $form->labelEx($modelConyugeCliente,'[1]nombre'); ?>

                        <?php echo $form->textField($modelConyugeCliente,'[1]nombre'); ?>

                        <?php echo $form->error($modelConyugeCliente,'[1]nombre'); ?>

                </div>      

                <div class="row">

                        <?php echo $form->labelEx($modelConyugeCliente,'[1]seg_nombre'); ?>

                        <?php echo $form->textField($modelConyugeCliente,'[1]seg_nombre'); ?>

                        <?php echo $form->error($modelConyugeCliente,'[1]seg_nombre'); ?>

                </div>      

                <div class="row">

                        <?php echo $form->labelEx($modelConyugeCliente,'[1]ape_paterno'); ?>

                        <?php echo $form->textField($modelConyugeCliente,'[1]ape_paterno'); ?>

                        <?php echo $form->error($modelConyugeCliente,'[1]ape_paterno'); ?>

                </div> 

                <div class="row">

                        <?php echo $form->labelEx($modelConyugeCliente,'[1]direccion'); ?>

                        <?php echo $form->textField($modelConyugeCliente,'[1]direccion'); ?>

                        <?php echo $form->error($modelConyugeCliente,'[1]direccion'); ?>

                </div> 

                <div class="row">

                        <?php echo $form->labelEx($modelConyugeCliente,'[1]celular'); ?>

                        <?php echo $form->textField($modelConyugeCliente,'[1]celular'); ?>

                        <?php echo $form->error($modelConyugeCliente,'[1]celular'); ?>

                </div>                   

            </div>

            

        </fieldset>

        <fieldset>

            <legend>Datos Aval</legend>

        <div class="row">

                <?php echo CHtml::label('Tiene Aval?',''); ?>

                <?php echo CHtml::radioButtonList('aval',$aval, $opcionesBasicasSiNo,array('class'=>'conyuge'),array('separator'=>'')); ?>

        </div>

            <div class="formularioAval" style="display: none">

                <div class="row">

                        <?php echo $form->labelEx($model,'id_aval'); ?>

                        <?php echo $form->textField($model,'id_aval'); ?>

                        <?php echo $form->error($model,'id_aval'); ?>

                </div>

                <div class="row">

                        <?php echo $form->labelEx($modelAvalCliente,'[2]nombre'); ?>

                        <?php echo $form->textField($modelAvalCliente,'[2]nombre'); ?>

                        <?php echo $form->error($modelAvalCliente,'[2]nombre'); ?>

                </div>      

                <div class="row">

                        <?php echo $form->labelEx($modelAvalCliente,'[2]seg_nombre'); ?>

                        <?php echo $form->textField($modelAvalCliente,'[2]seg_nombre'); ?>

                        <?php echo $form->error($modelAvalCliente,'[2]seg_nombre'); ?>

                </div>      

                <div class="row">

                        <?php echo $form->labelEx($modelAvalCliente,'[2]ape_paterno'); ?>

                        <?php echo $form->textField($modelAvalCliente,'[2]ape_paterno'); ?>

                        <?php echo $form->error($modelAvalCliente,'[2]ape_paterno'); ?>

                </div> 

                <div class="row">

                        <?php echo $form->labelEx($modelAvalCliente,'[2]direccion'); ?>

                        <?php echo $form->textField($modelAvalCliente,'[2]direccion'); ?>

                        <?php echo $form->error($modelAvalCliente,'[2]direccion'); ?>

                </div>

                <div class="row">

                        <?php echo $form->labelEx($modelAvalCliente,'[2]direccion'); ?>

                        <?php echo $form->textField($modelAvalCliente,'[2]direccion'); ?>

                        <?php echo $form->error($modelAvalCliente,'[2]direccion'); ?>

                </div>  

                <div class="row">

                        <?php echo $form->labelEx($modelAvalCliente,'[2]celular'); ?>

                        <?php echo $form->textField($modelAvalCliente,'[2]celular'); ?>

                        <?php echo $form->error($modelAvalCliente,'[2]celular'); ?>

                </div>                  

                

            </div>          

        </fieldset>

        <fieldset>

            <legend>Datos Referencia</legend>

        <div class="row">

                <?php echo CHtml::label('Tiene Referencia?',''); ?>

                <?php echo CHtml::radioButtonList('referencia',$referencia, $opcionesBasicasSiNo,array('class'=>'referencia'),array('separator'=>'')); ?>

        </div>

            <div class="formularioReferencia" style="display: none">

                <div class="row">

                        <?php echo $form->labelEx($model,'id_referencia'); ?>

                        <?php echo $form->textField($model,'id_referencia'); ?>

                        <?php echo $form->error($model,'id_referencia'); ?>

                </div>

                <div class="row">

                        <?php echo $form->labelEx($modelReferenciaCliente,'[3]nombre'); ?>

                        <?php echo $form->textField($modelReferenciaCliente,'[3]nombre'); ?>

                        <?php echo $form->error($modelReferenciaCliente,'[3]nombre'); ?>

                </div>      

                <div class="row">

                        <?php echo $form->labelEx($modelReferenciaCliente,'[3]seg_nombre'); ?>

                        <?php echo $form->textField($modelReferenciaCliente,'[3]seg_nombre'); ?>

                        <?php echo $form->error($modelReferenciaCliente,'[3]seg_nombre'); ?>

                </div>      

                <div class="row">

                        <?php echo $form->labelEx($modelReferenciaCliente,'[3]ape_paterno'); ?>

                        <?php echo $form->textField($modelReferenciaCliente,'[3]ape_paterno'); ?>

                        <?php echo $form->error($modelReferenciaCliente,'[3]ape_paterno'); ?>

                </div> 

                <div class="row">

                        <?php echo $form->labelEx($modelReferenciaCliente,'[3]direccion'); ?>

                        <?php echo $form->textField($modelReferenciaCliente,'[3]direccion'); ?>

                        <?php echo $form->error($modelReferenciaCliente,'[3]direccion'); ?>

                </div>  

                <div class="row">

                        <?php echo $form->labelEx($modelReferenciaCliente,'[3]celular'); ?>

                        <?php echo $form->textField($modelReferenciaCliente,'[3]celular'); ?>

                        <?php echo $form->error($modelReferenciaCliente,'[3]celular'); ?>

                </div>  

            </div>

           

        </fieldset>

        <fieldset>

            <legend>Datos Bancarios</legend>

            <div class="row">

                    <?php echo $form->labelEx($modelBanco,'id_banco'); ?>

                    <?php $this->widget('ext.select2.ESelect2',array(

                      'model'=>$modelBanco,

                      'attribute'=>'id_banco',

                      'data'=>$opcionesBanco,

                    )); 

                    ?> 

                    <?php echo $form->error($modelBanco,'id_banco'); ?>

            </div>

            <div class="row">

                    <?php echo $form->labelEx($modelBanco,'id_tipocuenta'); ?>

                    <?php $this->widget('ext.select2.ESelect2',array(

                      'model'=>$modelBanco,

                      'attribute'=>'id_tipocuenta',

                      'data'=>$opcionesTipoCuenta,

                    )); 

                    ?> 

                    <?php echo $form->error($modelBanco,'id_tipocuenta'); ?>

            </div>

          <div class="row">

                    <?php echo $form->labelEx($modelBanco,'numero'); ?>

                    <?php echo $form->textField($modelBanco,'numero'); ?>

                    <?php echo $form->error($modelBanco,'numero'); ?>

            </div>

                    

        </fieldset>

        <fieldset>

            <legend>Antecedentes Laborales</legend>

          

        <div class="row">

                <?php echo $form->labelEx($modelAntecedentesLaborales,'nom_empresa'); ?>

                <?php echo $form->textField($modelAntecedentesLaborales,'nom_empresa'); ?>

                <?php echo $form->error($modelAntecedentesLaborales,'nom_empresa'); ?>

        </div>     

          <div class="row">

                    <?php echo $form->labelEx($modelAntecedentesLaborales,'ant_empresa'); ?>

                    <?php echo $form->textField($modelAntecedentesLaborales,'ant_empresa'); ?>

                    <?php echo $form->error($modelAntecedentesLaborales,'ant_empresa'); ?>

            </div>

          <div class="row">

                    <?php echo $form->labelEx($modelAntecedentesLaborales,'tel_empresa'); ?>

                    <?php echo $form->textField($modelAntecedentesLaborales,'tel_empresa'); ?>

                    <?php echo $form->error($modelAntecedentesLaborales,'tel_empresa'); ?>

            </div>              

        </fieldset>        

        <fieldset>

            <legend>Datos Empresa</legend>

        <div class="row">

                <?php echo $form->labelEx($model,'rut_empresa'); ?>

                <?php echo $form->textField($model,'rut_empresa'); ?>

                <?php echo $form->error($model,'rut_empresa'); ?>

        </div>               

        <div class="row">

                <?php echo $form->labelEx($model,'gir_empresa'); ?>

                <?php echo $form->textField($model,'gir_empresa',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'gir_empresa'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'rep_legal'); ?>

                <?php echo $form->textField($model,'rep_legal',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'rep_legal'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'notaria'); ?>

                <?php echo $form->textField($model,'notaria',array('size'=>50,'maxlength'=>50)); ?>

                <?php echo $form->error($model,'notaria'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'fec_rep_legal'); ?>

                <?php $this->widget('zii.widgets.jui.CJuiDatePicker',array(

                        'attribute'=>'fec_rep_legal',

                        'model'=>$model,

                        'language' => 'es',

                        // additional javascript options for the date picker plugin

                        'options'=>array(

                            'showAnim'=>'fold',

                        ),

                        'options'=>array(

                            'dateFormat'=>'dd/mm/yy'

                        ),           

                    )); 

                ?>

                <?php echo $form->error($model,'fec_rep_legal'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($model,'fech_con_sociedad'); ?>

                <?php $this->widget('zii.widgets.jui.CJuiDatePicker',array(

                        'attribute'=>'fech_con_sociedad',

                        'model'=>$model,

                        'language' => 'es',

                        // additional javascript options for the date picker plugin

                        'options'=>array(

                            'showAnim'=>'fold',

                        ),

                        'options'=>array(

                            'dateFormat'=>'dd/mm/yy'

                        ),           

                    )); 

                ?>

                <?php echo $form->error($model,'fech_con_sociedad'); ?>

        </div>            

        </fieldset>

        <fieldset>

            <legend>Estado de Cliente</legend>

        <div class="row">

                <?php echo $form->labelEx($model,'id_estadocliente'); ?>

                <?php $this->widget('ext.select2.ESelect2',array(

                  'model'=>$model,

                  'attribute'=>'id_estadocliente',

                  'data'=>$opcionesEstadoCliente,

                )); ?> 

                <?php echo $form->error($model,'id_estadocliente'); ?>

        </div>            

        </fieldset>

        <div class="row buttons">

                <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>

        </div>


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


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

No tiene relación con el problema en sí, pero veo en tu código que recibes en tu request $_POST[‘AntecedentesLaborales’] pero no asignas los valores del arreglo a los atributos del modelo $modelAntecedentesLaborales.

Te paso este enlace, q en principio debería ayudarte en tu problema:

Validar 2 instancias de un modelo en el mismo form

Un saludo.