Un formulario para varios modelos

Soy nuevo en Yii y estoy usando la version 1.1, mi problema es que necesito un solo formulario para registrar varios campos de al menos 11 tablas distintas con sus respectivas validaciones (Coloco las imagenes de mi BD al final del post ), lo que hice fue hacer 3 formularios y colocarlos adentro de un accordion, y le pase por el controlador todos los modelos que ultilizan los campos, quedando de esta forma

Controlador




public function actionIndex()

	{

		$model=new PruebaForm;

		$model_act=new Actuacion;

		$model_tipoAten=new TipoAtencion;

		$model_tipoEmp=new TipoEmpleado;

		$model_tipoSoli=new TipoSolicitante;

		$model_inst=new Institucion;

		$model_persona=new Persona;

		$model_entidad=new Entidad;

		$model_municipio=new Municipio;

		$model_parroquia=new Parroquia;

		$model_tipoActua=new TipoActuacion;

		$model_tipoTramite=new TipoTramiteAdministrativo; 


		

		$this->render('index',array('model'=>$model,

									'model_act'=>$model_act,

									'model_tipoAten'=>$model_tipoAten,

									'model_tipoEmp'=>$model_tipoEmp,

									'model_tipoSoli'=>$model_tipoSoli,

									'model_inst'=>$model_inst,

									'model_persona'=>$model_persona,

									'model_entidad'=>$model_entidad,

									'model_municipio'=>$model_municipio,

									'model_parroquia'=>$model_parroquia,

									'model_tipoActua'=>$model_tipoActua,

									'model_tipoTramite'=>$model_tipoTramite));




	}



La vista index, donde esta el accordion





<?php $form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(

    'id'=>'actuacion-form',

    

    // Please note: When you enable ajax validation, make sure the corresponding

    // controller action is handling ajax validation correctly.

    // There is a call to performAjaxValidation() commented in generated controller code.

    // See class documentation of CActiveForm for details on this.

    'enableAjaxValidation'=>false,

)); ?>

<div class="form">

<?php

# Registro Accordion 

    $this->widget('zii.widgets.jui.CJuiAccordion', array(

    	'panels'=>array(

            # Para mostrar la vista en el Accordion se utiliza el $this->renderPartial('NOMBRE DE LA VISTA',array('model'=>$model),true)

    		'Datos del Solicitante'=>$this->renderPartial('datos_solicitante',array('model'=>$model,'model_tipoAten'=>$model_tipoAten,'model_tipoEmp'=>$model_tipoEmp,'model_tipoSoli'=>$model_tipoSoli,'model_inst'=>$model_inst,'model_persona'=>$model_persona,'model_entidad'=>$model_entidad,'model_municipio'=>$model_municipio,'model_parroquia'=>$model_parroquia),true),


    		'Datos de la ActuaciĆ³n'=>$this->renderPartial('datos_actuacion',array('model'=>$model,'model_act'=>$model_act,'model_tipoActua'=>$model_tipoActua),true),


    		'Tramite Administrativo'=>$this->renderPartial('tramite_administrativo',array('model'=>$model,'model_tipoTramite'=>$model_tipoTramite),true),

    	),

    	// additional javascript options for the accordion plugin

    	'options'=>array(

     	'collapsible'=> true,

	       #'animated'=>'bounceslide',

	        'autoHeight'=>false,

	        #'active'=>0,

    	'icons'=>array(

    		#Usa Iconos de Jquery

	        "header"=>"ui-icon-triangle-1-s",  

	        "headerSelected"=>"ui-icon-triangle-1-e", 

	        ),

    ),

    )); 


?>


<hr>

<div class="control-group" align="center" >

            <?php echo CHtml::submitButton('Registrar',array('class'=>'btn btn-primary')); ?>

        </div>

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

</div>




Vista datos del Solicitente




<?php /** @var TbActiveForm $form */

	$form = $this->beginWidget(

		'bootstrap.widgets.TbActiveForm',

		    array(

		        'id' => 'verticalForm',

		        'type' => 'vertical',

		        

		        #'htmlOptions' => array('class' => 'well'),

		    )

		);?>	

	<div class="col-md-11">

		<div class="col-md-4">

			<div class="control-group span2">

				<?php echo $form->radioButtonListRow(

           	 	$model_tipoAten,

            	'nombre',

            	array(

                'Personal',

                'TelefĆ³nica',

            	)

        		); ?>

			</div>

			<div class="control-group span2" >

				<?php echo $form->radioButtonListRow(

            	$model_tipoSoli,

            	'nombre',

            	array(

             	   'Interno',

               	   'Externo',

          		  )

       			 ); ?>

			</div>

			<div class="control-group span3" >

				<?php echo $form->dropDownListRow(

	            $model_tipoEmp,

	            'nombre',

	            array('Fijo', 'Contratista', 'Contratado BCV','Jubilado'),

	            #CHtml::listData(TipoEmpleado::model()->findAll(), 'id', 'nombre'),

	            array('multiple' => true)

	        	); ?>

			</div>

			<div class="control-group span3">

				<?php echo $form->textFieldRow($model_inst,'nombre')?>

			</div>

			<div class="control-group span3">

				<?php echo $form->textFieldRow($model_persona,'documento_identificacion')?>

			</div>

			<div class="control-group span3">

				<?php echo $form->textFieldRow($model_persona,'primer_nombre')?>

			</div>

			<div class="control-group span2">

				<?php echo $form->textFieldRow($model_persona,'primer_apellido')?>

			</div>

	

		</div>

		<hr width=100% align="center"> 

		<div class="col-md-4">

			<h4>Contacto</h4>

			<div class="control-group span3" >

			<?php echo $form->labelEx($model_persona,'telefono_celular'); ?>

				<?php $this->widget('CMaskedTextField', array(

				'model' => $model_persona,

				'attribute' => 'telefono_celular',

				'mask' => '(9999)-999-9999',

				'htmlOptions' => array('size' => 11)

				));

				?>

			</div>

			<div class="control-group span3">

			<?php echo $form->labelEx($model_persona,'telefono_residencia'); ?>

				<?php $this->widget('CMaskedTextField', array(

				'model' => $model_persona,

				'attribute' => 'telefono_residencia',

				'mask' => '(9999)-999-9999',

				'htmlOptions' => array('size' => 11)

				));

				?>

			</div>

			<div class="control-group span3">

			<?php echo $form->labelEx($model_persona,'telefono_residencia2'); ?>

				<?php $this->widget('CMaskedTextField', array(

				'model' => $model_persona,

				'attribute' => 'telefono_residencia2',

				'mask' => '(9999)-999-9999',

				'htmlOptions' => array('size' => 11)

				));

				?>

			</div>

			<div class="control-group span3">

				<?php echo $form->textFieldRow($model_persona,'correo_electronico') ?>

			</div>

		</div>

		<hr>

		<h4>Procedencia</h4>

		<div class="col-md-4">

			<div class="control-group span3">

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

				<?php $this->widget(

    'bootstrap.widgets.TbSelect2',

    array(

        'name' => 'estado',

        'model'=>$model_entidad,

        'data' => CHtml::listData(Entidad::model()->findAll(), 'id', 'nombre'),

        'options' => array(

            'placeholder' => 'Seleccione...',

            #'width' => '40%',

        )

    )

);

        ?>

		    </div>

		    <div class="control-group span3">

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

				<?php $this->widget(

    'bootstrap.widgets.TbSelect2',

    array(

        'name' => 'municipio',

        'model'=>$model_municipio,

        'data' => CHtml::listData(Municipio::model()->findAll(), 'id', 'nombre'),

        'options' => array(

            'placeholder' => 'Seleccione...',

            #'width' => '40%',

        )

    )

);

        ?>

		    </div>

		    <div class="control-group span3">

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

				<?php $this->widget(

    'bootstrap.widgets.TbSelect2',

    array(

        'name' => 'parroquia',

        'model'=>$model_parroquia,

        'data' => CHtml::listData(Parroquia::model()->findAll(), 'id', 'nombre'),

        'options' => array(

            'placeholder' => 'Seleccione...',

            #'width' => '40%',

        )

    )

);

        ?>

		    </div>

		</div>

	</div>

	<?php echo CHtml::submitButton('Registrar',array('class'=>'btn btn-primary')); ?>

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




Vista datos de la Actuacion




<?php $form = $this->beginWidget(

    'bootstrap.widgets.TbActiveForm',

    array(

        'id' => 'verticalForm',

        'type' => 'vertical',

        #'htmlOptions' => array('class' => 'well'),

    )

    );?>

    <div class="col-md-11">

        

            <div class="control-group span2">

            <?php echo $form->radioButtonListRow(

            $model_tipoActua,

            'nombre',

            array(

                'Denuncia',

                'Reclamo',

                'Sugerencia',

                'Informacion BCV',

                'Ayuda Social',

                'Informacion PC',

             

             )

            ); ?>

            </div>

        

        <div class="control-group span3">

        <?php echo $form->textFieldRow($model_act,'fecha_registro',array('readonly'=>'readonly','id'=>'prueba','value'=>

                 date("d/m/Y")

            ))?>

        </div>

        <div class="control-group span4" >

			<?php echo $form->textAreaRow($model_act,'descripcion',array('style'=>'width: 300px; height: 200px;'));?>

		</div>

		<div class="control-group">

		<?php echo $form->radioButtonListRow(

            $model,

            'documentos_anex',

            array(

                'Si',

                'No',

                

            )

        ); ?>

        </div>

        <div class="control-group offset7">

       <?php echo $form->checkBoxListRow(

            $model,

            'checkboxes',

            array(

                '1',

                '2',

                '3',

                '4',

                '5',

                '6',

            )

            

        ); ?>

        </div>

            

    </div>

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



Y la Vista Tramite Administrativo




<?php $form = $this->beginWidget(

    'bootstrap.widgets.TbActiveForm',

    array(

        'id' => 'verticalForm',

        'type' => 'vertical',

        #'htmlOptions' => array('class' => 'well'),

    )

);?>

    <div class="col-md-11">

        <div class="col-md-4">

            <div class="control-group span3">

                <?php echo $form->radioButtonListRow(

                        $model,

                        'radioButtons',

                        array(

                            'Interno',

                            'Corresponsabilidad',

                            'SPNS',

                            'Orientado',

                            

                        )

                    ); ?>

            </div>

        <div class="control-group span3">

                <?php echo $form->dropDownListRow(

                $model_tipoTramite,

                'nombre',

                array('Something ...', '1', '2', '3', '4', '5')

                ); ?>

        </div>

        <div class="control-group span3">

                <?php echo $form->dropDownListRow(

                $model_tipoTramite,

                'nombre',

                array('Something ...', '1', '2', '3', '4', '5')

                 ); ?>

        </div>

        <div class="control-group span3">

                <?php echo $form->dropDownListRow(

                $model_tipoTramite,

                'nombre',

                array('Something ...', '1', '2', '3', '4', '5')

                ); ?>

        </div>

        

        <div class="control-group span3">

                <?php echo $form->dropDownListRow(

                $model_tipoTramite,

                'nombre',

                array('Something ...', '1', '2', '3', '4', '5')

                ); ?>

        </div>

    </div>

    </div>

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




Solo necesito saber como utilizar esos campos del modelo en mi formulario con sus mensajes de validacion

Saludos y muchas gracias de antemano

Buenas.

AquĆ­ tu soluciĆ³n

Un saludo.

1 Like