CakePHP: Usar valores específicos en un elemento select

Sucede que en algún formulario de nuestras vistas podemos necesitar un elemento HTML select con unos valores que no se obtienen de una tabla de la Base de Datos (como sucede en los formularios de alta o modificación que crea cakePHP cuando existen relaciones belongsTo, por ejemplo) y queremos especificarlos nosotros mismos.

Una manera de conseguirlo es, en el controlador:

$dia = array('Lunes' => 'Lunes', 'Martes' => 'Martes', 'Miercoles' => 'Miercoles', 'Jueves' => 'Jueves', 'Viernes' =>'Viernes', 'Sábado' => 'Sábado', 'Domingo' => 'Domingo');
$this->set(compact('dia'));

Los keys del array $dia serán los values de los options del futuro select. Y el texto que se mostrá, será el value del array. Si el key no se especifica, los values de los options serán valores númericos correlativos empezando desde el 0.

Y en la vista:

echo $form->select('dia', $dia, null, null, false);

Resultado, obtenemos un desplegable con los días de la semana:

<select name="data[Zone][dia]" id="ZoneDia">
     <option value="Lunes">Lunes</option>
     <option value="Martes">Martes</option>
     <option value="Miercoles">Miercoles</option>
     <option value="Jueves">Jueves</option>
     <option value="Viernes">Viernes</option>
     <option value="Sábado">Sábado</option>
     <option value="Domingo">Domingo</option>
</select>

Más información sobre FormHelper::select

Tags: ,

3 Responses to “CakePHP: Usar valores específicos en un elemento select”

  1. krusty999 Says:
    April 16th, 2008 at 7:23 am

    Hola, una pregunta para que es el compact en:

    $this->set(compact(’dia’));

    Saludos.

  2. krusty999 Says:
    April 16th, 2008 at 7:25 am

    Ya me di cuenta es para setear ams rapidamente, busca la variable con el mismo nombre y la setea. Es para eso no?

  3. admin Says:
    April 16th, 2008 at 7:37 am

    Exáctamente :-) .
    En la documentación de PHP hay una buena expliacación y unos cuantos ejemplos de uso. http://es2.php.net/manual/es/function.compact.php

    Saludos.

Leave a Reply