2012-07-05 12 views
6

tengo la siguiente situación:Symfony2: Cómo modificar un valor formulario antes de la validación

  • un tipo de campo de formulario date
  • un patrón de validación como dd.mm.YYYY
  • un objeto auxiliar que convierte 12 en 12.07.2012 o 2.5 en 02.05.2012 etc.

Mi pregunta es: ¿A dónde llamo el método que transforma el valor de entrada?

Cuando lo llamo desde el set -metodo de la entidad, el valor en realidad se modifica. Pero al cargar el formulario nuevamente (por ejemplo, envío incompleto), se muestra el valor anterior (como 2.5) y no el valor transformado (2.5.2012). Ahora, ¿cómo le digo a la forma, que el valor ha cambiado dentro de la entidad?

Tal vez también hay otra forma de hacerlo en el medio:

$form->bindRequest($request); 
// do some fancy stuff here 
if ($form->isValid()) {} 

PHP

Esto es de la Entidad:

/** 
* @ORM\Column(type="datetime", nullable=true) 
* @Assert\DateTime() 
*/ 
protected $date_start; 

Esto es de la Tipo:

$builder->add('date_start', 'datetime', array(
    'label' => 'Start Datum/Uhrzeit', 
    'date_widget' => 'single_text', 
    'time_widget' => 'single_text', 
    'date_format' => 'dd.MM.yyyy', 
    'with_seconds' => false, 
    'required' => false, 
)); 
+0

He publicado una respuesta a continuación, pero si necesita más detalles no dude en publicar el código para su tipo de formulario y el modelo y probablemente pueda obtener más específico. – MDrollette

Respuesta

11

Hay dos formas de modificar los formularios y los datos vinculados a ellos. Puede usar eventos de formulario, hay un ejemplo de su uso here o puede usar un DataTransformer que se explica here

Por el sonido de su caso, creo que un DataTransformer tiene más sentido. Está representando los datos en el objeto de una manera, pero necesita presentarlos en el formulario de una manera diferente e invertir esa transformación cuando se envía el formulario. Este es el propósito del DataTransformer.

+0

Muchas gracias, el 'DataTransformer' parece ser exactamente lo que estoy buscando. – insertusernamehere

Cuestiones relacionadas