Después de añadir los metadatos de validación a la clase Task
, Symfony ya sabe alguna cosa sobre tus campos. Así que Symfony puede deducir el tipo de campo más apropiado para cada propiedad y configurarlo automáticamente. En este ejemplo, Symfony puede deducir toda la información a partir de las reglas de validación de ambos campos (task
es un campo de texto normal y dueDate
es un campo date
):
public function newAction()
{
$task = new Task();
$form = $this->createFormBuilder($task)
->add('task')
->add('dueDate', null, array('widget' => 'single_text'))
->getForm();
}
La deducción de la información se produce cuando omites el segundo argumento del método date()
o cuando le pasas null
. Si pasas un array de opciones como tercer argumento (como hace por ejemplo dueDate
), estas opciones redefinen cualquier opción que se haya establecido automáticamente.
Advertencia Si tu formulario utiliza una validación de grupo, al deducir el tipo y configuración de un campo se tendrán en cuenta todas las reglas de validación asociadas al campo, pertenezcan o no al grupo que estés utilizando.
12.4.1. Deduciendo las opciones de configuración del campo
Además de deducir el tipo de un campo, Symfony también puede tratar de adivinar los valores adecuados para varias opciones de configuración:
required
: se deduce en base a las reglas de validación (si el campo esNotBlank
oNotNull
) o los metadatos de Doctrine (si el campo esnullable
o no). Esto es muy útil, porque la validación del navegador se actualiza automáticamente con tus reglas de validación del servidor.max_length
: si el campo es de tipo texto, entonces la opciónmax_length
se puede inferir a partir de las restricciones de validación (si utilizasLength
oRange
) o a partir de los metadatos de Doctrine (mediante la longitud del campo).
Truco Cuando se utilizan estas opciones, los campos de formulario incluyen atributos HTML especiales que activan la validación en el propio navegador. Desafortunadamente, no generan las restricciones equivalente para el lado del servidor (por ejemplo, Assert\Length
).
Nota Estas opciones sólo se infieren si estás permitiendo que Symfony deduzca el tipo de campo (es decir, si no indicas el segundo argumento del método add()
o si le pasas null
).
Si quieres cambiar alguno de los valores inferidos, los puedes redefinir pasando la opción en el array de opciones del campo:
->add('task', null, array('max_length' => 4))