Un campo choice especial que está diseñado para cargar las opciones de una entidad Doctrine. Por ejemplo, si tiene una entidad Categoria, puedes utilizar este campo para mostrar un campo select todos o algunos de los objetos Categoria de la base de datos.
Rendered as | can be various tags (see Etiqueta select, casillas de verificación o botones de radio) |
Options | |
Inherited options | |
Parent type | choice |
Class | Symfony\Bridge\Doctrine\Form\Type\EntityType |
El tipo entidad tiene una sola opción obligatoria: la entidad que debe aparecer dentro del campo de elección:
$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'property' => 'username',
));
En este caso, todos los objetos Usuario serán cargados desde la base de datos y representados como etiquetas select, botones de radio o una serie de casillas de verificación (esto depende del valor multiple y expanded). Si el objeto entidad no tiene un método __toString() la opción property es necesaria.
Si es necesario especificar una consulta personalizada a utilizar al recuperar las entidades (por ejemplo, sólo deseas devolver algunas entidades, o necesitas ordenarlas), utiliza la opción query_builder. La forma más fácil para utilizar la opción es la siguiente:
use Doctrine\ORM\EntityRepository;
// ...
$builder->add('users', 'entity', array(
'class' => 'AcmeHelloBundle:User',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.username', 'ASC');
},
));
Este campo se puede reproducir como uno de varios campos HTML, dependiendo de las opciones expanded y multiple:
tipo elemento | expandido | múltiple |
---|---|---|
etiqueta de selección | false | false |
etiqueta de selección (con atributo multiple) | false | true |
botones de radio | true | false |
caja de verificación (checkboxes) | true | true |
tipo: string required
La clase de tu entidad (por ejemplo, AcmeStoreBundle:Category). Este puede ser un nombre de clase completo (por ejemplo, Acme\StoreBundle\Entity\Category) o el nombre del alias corto (como te mostramos anteriormente).
tipo: string
Esta es la propiedad que se debe utilizar para visualizar las entidades como texto en el elemento HTML. Si la dejas en blanco, el objeto entidad será convertido en una cadena y por lo tanto debe tener un método __toString().
tipo: string
Esta es una propiedad ruta (por ejemplo, author.name) usada para organizar en grupos las opciones disponibles. Sólo funciona cuando se representa como una etiqueta de selección y lo hace añadiendo etiquetas optgroup en torno a las opciones. Las opciones que no devuelvan un valor para esta propiedad ruta se dibujan directamente debajo de la etiqueta de selección, sin un optgroup circundante.
tipo: Doctrine\ORM\QueryBuilder o un Closure
Si lo especificas, se utiliza para consultar el subconjunto de opciones (y el orden) que se debe utilizar para el campo. El valor de esta opción puede ser un objeto QueryBuilder o un Cierre. Si utilizas un Cierre, este debe tener un sólo argumento, el cual es el EntityRepository de la entidad.
tipo: string predefinido: el gestor de la entidad
Si lo especificas, el gestor de la entidad especificada se utiliza para cargar las opciones en lugar de las predeterminadas del gestor de la entidad.
Estas opciones las hereda del tipo choice:
tipo: Boolean predeterminado: false
Si es true, el usuario podrá seleccionar varias opciones (en contraposición a elegir sólo una opción). Dependiendo del valor de la opción expanded, esto reproducirá una etiqueta de selección o casillas de verificación si es true y una etiqueta de selección o botones de radio si es false. El valor devuelto será un arreglo.
Nota
If you are working with a collection of Doctrine entities, it will be helpful to read the documention for the Tipo de campo Collection as well. In addition, there is a complete example in the cookbook article Cómo integrar una colección de formularios.
tipo: Boolean predeterminado: false
Si es true, los botones de radio o casillas de verificación se reproducirán (en función del valor de multiple). Si es false, se reproducirá un elemento de selección.
tipo: array predeterminado: array()
Si se especifica esta opción, entonces un subconjunto de todas las opciones se trasladará a la parte superior del menú de selección. Lo siguiente debe mover la opción «Baz» a la parte superior, con una separación visual entre esta y el resto de las opciones:
$builder->add('foo_choices', 'choice', array(
'choices' => array('foo' => 'Foo', 'bar' => 'Bar', 'baz' => 'Baz'),
'preferred_choices' => array('baz'),
));
Ten en cuenta que las opciones preferidas sólo son útiles cuando se reproducen como un elemento select (es decir, expanded es false). Las opciones preferidas y las opciones normales están separadas visualmente por un conjunto de líneas punteadas (es decir, -------------------). Esto se puede personalizar cuando reproduzcas el campo:
{{ form_widget(form.foo_choices, { 'separator': '=====' }) }}
<?php echo $view['form']->widget($form['foo_choices'], array('separator' => '=====')) ?>
tipo: string o Boolean
Esta opción determina si o no una opción empty especial (por ejemplo, «Elige una opción») aparecerá en la parte superior de un elemento gráfico de selección. Esta opción sólo se aplica si ambas opciones expanded y multiple se establecen en false.
Añade un valor vacío con «Elige una opción», como el texto:
$builder->add('states', 'choice', array(
'empty_value' => 'Choose an option',
));
Garantiza que ninguna opción con valor empty se muestre:
$builder->add('states', 'choice', array(
'empty_value' => false,
));
Si dejas sin establecer la opción empty_value, entonces automáticamente se añadirá una opción con espacio en blanco (sin texto) si y sólo si la opción required es false:
// añadirá una opción de espacio en blanco (sin texto)
$builder->add('states', 'choice', array(
'required' => false,
));
Estas opciones las hereda del tipo field:
tipo: Boolean predeterminado: true
Si es true, reproducirá un atributo required de HTML5. La label correspondiente será reproducida con una clase required.
Esto es superficial e independiente de la validación. A lo sumo, si dejas que Symfony deduzca el tipo de campo, entonces el valor de esta opción, se puede inferir a partir de tu información de validación.
tipo: string predefinido: La etiqueta se «deduce» a partir del nombre del campo
Establece la etiqueta que se utilizará al reproducir el campo. La etiqueta también se puede fijar directamente dentro de la plantilla:
{{ form_label(form.name, 'Tu nombre') }}
Nuevo en la versión 2.1: The read_only option was changed in 2.1 to render as a readonly HTML attribute. Previously, it rendered as a disabled attribute. Use the disabled option if you need the old behavior.
tipo: Boolean predeterminado: false
If this option is true, the field will be rendered with the readonly attribute so that the field is not editable.
Nuevo en la versión 2.1: The disabled option is new in version 2.1
type: boolean default: false
Si no deseas que un usuario pueda modificar el valor de un campo, puedes establecer la opción disabled en true. Cualquier valor recibido será omitido.
tipo: Boolean predeterminado: false
Si es true, los errores de este campo serán pasados al campo padre o al formulario. Por ejemplo, si estableces en true un campo normal, cualquier error de ese campo se adjuntará al formulario principal, no al campo específico.