Formularios de Symfony, burbujeo de errores
Frecuentes
Visto 11,398 veces
3
Tengo un problema con el burbujeo de errores de los formularios. Un campo en mi formulario se define así:
$formBuilder->add('title','text',
'required' => true,
'error_bubbling' => false,
)
)
Me gustaría agregar un validador como este a este campo:
/**
* @Assert\True(message = "Bad title.")
*/
public function getTitleCorrect()
{
/* ... */
return false;
}
Funciona bien, pero el mensaje de error aparece en la parte superior del formulario, no en la fila del campo.
En la plantilla Twig, este mensaje de error se representa mediante {{form_errors(form)}}
como un error global. cuando uso {{form_errors(form.title)}}
, no imprime mi error.
¿Qué puedo hacer para cambiar la asignación del error?
2 Respuestas
5
Los mensajes se adjuntan a un campo solo cuando el validador se adjunta a la propiedad correspondiente. Su validador está adjunto a un método de la clase, por lo que el error es realmente global.
Deberías hacer algo así:
use ...\TitleValidator as AssertTitleValid;
class MyEntity
{
/**
* @AssertTitleValid
*/
private $title;
}
Y cree su propia clase TitleValidator.
contestado el 04 de mayo de 12 a las 09:05
1
'error_bubbling' es false
de forma predeterminada, a menos que esté configurado para true
o la forma es compuesta.
Además, el error podría aparecer si hay alguna discrepancia entre el campo del formulario y la propiedad/método validado, como en su ejemplo o si se usa un caso diferente (snake_case
para el campo de formulario y $camelCase
para propiedad validada).
En este caso, puede usar 'error_mapping' en su clase de formulario:
/**
* @param OptionsResolver $resolver
*
* @throws AccessException
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => YourEntity::class,
'error_mapping' => [
'entityProperty' => 'form_field_1',
'entityMethod' => 'form_field_2',
],
]);
}
Respondido el 18 de diciembre de 19 a las 08:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php symfony or haz tu propia pregunta.