Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Cómo cambiar el mensaje de la constraint @UniqueEntity de Symfony

27 de agosto de 2016

Hola a todos,

Soy nuevo en Symfony y ps tengo una curiosidad. El UniqueEntity por defecto me devuelve un mensaje que es "este email esta en uso". Bueno lo que yo quisiera saver es si esto se puede editar en la manera que muestre "este {el_email_del_text} esta en uso".

Probé con con el Mesage="este correo {value} esta en uso" pensando que era igual que usando el mensaje del @Assert\Notblank donde si captura el valor de ese texto al darle al Submit y lo muestra "Este correo "[email protected]" no es valido". Pues quisiera algo así pero con el UniqueEntity :S


Respuestas

#1

Creo que en vez de {value} tienes que utilizar {{ value }} (debes escribir esta cadena exactamente así: respetando los espacios en blanco y añadiendo dos {{).

@javiereguiluz

27 agosto 2016, 10:15
#2

Ya intenté de esas maneras pero me vota error. ¿habrá alguna manera de cambiarlo desde la plantilla en el form_error{{form.email}} y que capture el valor del text? u.u al mostrar el mensaje de error.

¿Será porque el UniqueEntity se escribe arriba de la clase, a diferencia del @Assert\Email() que se escribe arriba del objeto email?

Esto si muestra el valor: @Assert\Email(message="Este Correo '{{ value }}' no es valido") pero esto muestra tal y como esta el mensaje @UniqueEntity("email",message="Este correo'{{ value }}' esta en uso pruebe otro").

@MceProjects

27 agosto 2016, 17:38
#3

Amigo me uno a tu duda.

@jdvellon

29 agosto 2016, 17:02
#4

He preguntado en el repositorio oficial de Symfony y me han confirmado que esta opción funciona desde Symfony 2.8 (ver respuestas). ¿Quizás estáis utilizando una versión anterior del framework?

@javiereguiluz

30 agosto 2016, 10:58
#5

Después de más comentarios, este es el comportamiento del mensaje personalizado en UniqueEntity:

  • Puedes usar {{ value }} desde Symfony 2.8
  • El valor de {{ value }} NO es el campo erróneo (ej. el email del usuario) sino la representación de la entidad en forma de texto.
  • Si la entidad define el método __toString(), se utiliza su valor para {{ value }}. Si no, se muestra un mensaje genérico: Object of class __CLASS__ identified by <comma separated IDs>
  • El mensaje de error siempre se muestra asociado al primer campo que produce el error. Si usas varias propiedades en la opción fields, el error solo se muestra en la primera.

Así que respondiendo a tu pregunta original, el mensaje de error no puede incluir el valor del email introducido. No obstante, el error se muestra justo al lado del campo de formulario del email, por lo que el mensaje puede decir ago así como : "Este email ya está en uso" y el usuario lo entenderá perfectamente.

@javiereguiluz

30 agosto 2016, 11:41