form - hidden cakephp 3
Crear cuadros de lista ''seleccionar'' usando FormHelper en CakePHP (2)
Tengo dos modelos, Category
y Point
. Las asociaciones se definen como:
Category hasMany Point
Point belongsTo Category
Al agregar Points
a mi base de datos, me gustaría poder seleccionar la categoría a la que pertenece desde un cuadro <select>
, junto con el resto de los datos del formulario.
¿Dónde debería set
la lista de categorías y cómo podría hacerlo? ¿Y cómo iba a producir el cuadro de selección?
Supongo que podría hacerse con
$form->input(''categorieslist'',array(''type''=>''select'')); //categorieslist needs
//setting somewhere.
En el controlador:
$categories = $this->Point->Category->find(''list'');
$this->set(compact(''categories''));
En la vista:
$form->input(''category_id'',array(''type''=>''select''));
También para generalizar un poco:
En una vista con acceso al ayudante de formulario
<?php
echo $form->input( ''dataKey'', array(
''type'' => ''select'',
''options'' => array(
''key1'' => ''val1'',
''key2'' => ''val2'',
),
));
?>
Lo anterior representará una entrada de selección con dos opciones. También puede colocar una opción vacía como primer elemento. Al pasar un valor de verdadero, simplemente agregará una opción vacía con un valor en blanco al comienzo de las opciones presentadas en el HTML.
<?php
echo $form->input( ''dataKey'', array(
''type'' => ''select'',
''options'' => array(
''key1'' => ''val1'',
''key2'' => ''val2'',
),
''empty'' => true,
));
?>
Puede pasar una cadena a la tecla ''vacía'' para que muestre texto personalizado como el campo clave para la opción vacía.
<?php
echo $form->input( ''dataKey'', array(
''type'' => ''select'',
''options'' => array(
''California'' => ''CA'',
''Oregon'' => ''OR'',
),
''empty'' => ''choose a state'',
));
?>
Un último ejemplo, también puede preseleccionar una opción con la tecla seleccionada. El valor debe coincidir con el valor de una de las opciones de selección, no la clave.
<?php
echo $form->input( ''dataKey'', array(
''type'' => ''select'',
''options'' => array(
''California'' => ''CA'',
''Oregon'' => ''OR'',
),
''empty'' => ''choose a state'',
''selected'' => ''California'',
));
?>
Del Modelo
Model->find( ''list'', array( ... ));
siempre devolverá una matriz formateada para usar con opciones de cuadro de selección. Si pasa datos a su vista almacenados en una variable con un nombre de modelo plural en minúsculas, es decir, ( $this->set( ''categories'', $categories );
, entonces automáticamente generará listas desplegables para modelos relacionados utilizando el formar ayuda en la vista y pasarle un índice de datos del mismo nombre de modelo en singular con el sufijo "_id".
La respuesta de Aziz en el n. ° 2 es el ejemplo de esa patada automática.