Validación De Selects

Hola, que tal. Soy nuevo con Yii y estoy llevando a cabo un proyecto desde cero con él para poder aprender.

Estoy validando un formulario CActiveForm, en el cual tengo 3 selects (país, región, estado), pero al momento de enviar los valores me dice que estos campos no pueden estar vacíos, aún así cuando yo los selecioné. También me gustaría saber cómo poder mantener los valores de estos después de validar, para no volver a tener que seleccionarlos.

Cualquier pista, se agradece.

Saludos,

Para poder ayudarte, postea tu código :)

En la vista:




<div class="row">

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

   <?php echo CHtml::dropDownList('region','', $this->getRegions(),

      array(

         'ajax' => array(

                     'type'=>'POST',

                     'url'=>CController::createUrl('users/getstates'),

                     'update'=>'#state',

                     'data'=>array('region'=>'js:this.value')

                  )

      )

   ); ?>

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

</div>


<div class="row">

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

   <?php echo CHtml::dropDownList('state','',array('0'=>'-- SELECCIONE -- '),

      array(

         'ajax' => array(

            'type'=>'POST',

            'url'=>CController::createUrl('users/getcities'),

            'update'=>'#city',

            'data'=>array('state'=>'js:this.value')

         )

      )

   ); ?>

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

</div>


<div class="row">

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

   <?php echo CHtml::dropDownList('city','',array('0'=>'-- SELECCIONE -- ')); ?>

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

</div>



La regla en el modelo:




return array(

	array('rut, first_name, last_name, address, region, state, city', 'required')

)



Controlador:




public function getRegions(){

   $list= Yii::app()->db->createCommand('SELECT * FROM regions')->queryAll();


   $rs = array('0'=>'-- SELECCIONE --');

   foreach($list as $item){

      $rs[$item['id']] = $item['region_name'];

   }

   return $rs;

}



Los select state y city los cargo con AJAX.

Al seleccionar region, state y city y al hacer submit, me arroja que los campos no pueden estar vacíos.

¿Cuál regla se podría aplicar para hacerlos campos obligatorios?

Gracias!

Tienes la idea correcta pero la ejecución no. Trata esto:

Vista:




$statelist = array();

$citylist = array();


<div class="row">

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

   <?php echo $form->dropDownList('$model','region',$this->getRegions(),

      array(

         'prompt'=>'-- SELECCIONE --',

         'ajax' => array(

                     'type'=>'POST',

                     'url'=>CController::createUrl('users/getstates'),

                     'update'=>'#state',

                     'data'=>array('region'=>'js:this.value')

                  )

      )

   ); ?>

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

</div>


<div class="row">

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

   <?php echo $form->dropDownList('$model','state',$statelist,array(

     'prompt'=>'-- SELECCIONE -- ',

     'id'=>'state',

     'ajax' => array(

        'type'=>'POST',

        'url'=>CController::createUrl('users/getcities'),

        'update'=>'#city',

        'data'=>array('state'=>'js:this.value')

     )

   )); ?>

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

</div>


<div class="row">

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

   <?php echo $form->dropDownList('$model','city',$citylist,array(

     'prompt'=>'-- SELECCIONE -- ',

     'id'=>'city'

    )); ?>

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

</div>



Controlador:




public function getRegions()

{

    $region = new Region; // o lo que sea

    return $region->ListAllRegions;

}



Modelo Regions:




public function ListAllRegions()

    {

    	$criteria = new CDbCriteria(array(

            'select'=>'ID, Name',

            'order'=>'Name ASC',

	));

	$listAllRegions = CHtml::listData($this->findAll($criteria), 'ID', 'Name');

        return $listAllRegions;

    }



Este estilo de código me ha funcionado bien en otras ocasiones.

El tema es que no tengo un modelo para las regiones, ¿es necesario tener un modelo por cada tabla de la base de datos que quiera consultar?

Estuve viendo que el problema ocurre porque al declarar…




<?php echo CHtml::dropDownList('city','',array('0'=>'-- SELECCIONE -- ')); ?>



… los datos que recibe el controlador son




Array

(

    [Users] => Array

        (

            [first_name] => test

            [last_name] => test test

        )


    [region] => 7

    [state] => 23

    [city] => 120

    [yt0] => Create

)



En cambio, cuando declaro…


<?php echo CHtml::activeDropDownList($model,'city','',array('0'=>'-- SELECCIONE -- ')); ?>

… recibe




[code]

Array

(

    [Users] => Array

        (

            [first_name] => test

            [last_name] => test test

            [region] => 7

            [state] => 23

            [city] => 120

        )


    [yt0] => Create

)



Ahí logre que funcionara!

Gracias compañero por la orientación ;)

Es recomendable si no quieres amarrarte a tener que cambiar el código cuando las necesidades de los usuarios cambian. No importa si las tablas son pequeñas.




<?php echo CHtml::activeDropDownList($model,'city','',array('0'=>'-- SELECCIONE -- ')); ?>



es equivalente a:




<?php echo $form->dropDownList($model,'city','',array('0'=>'-- SELECCIONE -- ')); ?>



Perfecto, muchas gracias por tu ayuda ;)

¡Feliz Navidad! :)