Formularios de Symfony, burbujeo de errores

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?

preguntado el 03 de mayo de 12 a las 21:05

2 Respuestas

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

'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 or haz tu propia pregunta.