miércoles, 27 de junio de 2012

CakePHP: Llenando un combo box

Aca estoy iniciando con mis primeros pasos en este framework que hasta el momento pinta muy bien. La documentación que existe en el sitio oficial donde exponen un caso de ejemplo desarrollando un blog es verdaderamente muy útil. Solamente me quedé un poco atascado en el desarrollo de mi propio ejemplo queriendo llenar un combo box.

En mi caso quería tener una pantalla para agregar una mascota seleccionando la raza a la que pertenece.  Para ello necesito poder mostrar las razas que se encuentran en una tabla aparte de la de mascotas.

Al final la solución que encontré fue la de importar la clase modelo "Raza" para poder hacer un "find" y mandar los resultados a la vista utilizando una notación especial para que se ajuste bien a un combo box.

Controlador

<?php
App::import('Model', 'Raza');

class MascotasController extends AppController {
    public $helpers = array('Html', 'Form');
    
    public function add() {  
        if ($this->request->is('post')) {
           // Código para salvar la mascota.
        } else {
            $raza = new Raza();          
            $razas = $raza->find('list', array(       
                  'fields' => array('Raza.id', 'Raza.nombre')
            ));
            $this->set('razas', $razas);         
        }
    }
}

Vista

<h1>Agregar Mascota</h1>
<?php
echo $this->Form->create('Mascota');
echo $this->Form->input('nombre');
echo $this->Form->input('raza', array(
    'type'    => 'select',
    'options' => $razas,
    'empty'   => false
));
echo $this->Form->end('Guardar Mascota');
?>

7 comentarios:

  1. gracias por el ejemplo tan claro

    ResponderEliminar
  2. Gracias, me has salvado de horas de busquedas

    ResponderEliminar
  3. Muy buen ejemplo! Fue de mucha ayuda! Muchas Gracias

    ResponderEliminar
  4. Me tira este error cuando intento guardar, donde deberia estar definido $razas en la vista?

    ResponderEliminar
    Respuestas
    1. Este es un ejemplo que no cubre la parte de base de datos. Me imagino que el error te da porque no existe la tabla asociada a razas.

      Eliminar
  5. Simple y bien explicado, funciono en minutos, gracias!

    ResponderEliminar
  6. excelente aporte muy claro

    ResponderEliminar