2012-07-05 13 views
6

Mam następującą sytuację:Symfony2: Jak zmodyfikować wartość formularz przed walidacji

  • typ pola formularza date
  • wzór walidacja jak dd.mm.YYYY
  • obiekt pomocnika, który włącza 12 w 12.07.2012 lub 2.5 w 02.05.2012 itp.

Moje pytanie brzmi: Gdzie mogę wywołać metodę, która przekształca wartość wejściową?

Po wywołaniu tego z metody set - wartość faktycznie się zmienia. Jednak przy ponownym ładowaniu formularza (np. Niepełne przesłanie) wyświetlana jest stara wartość (taka jak 2.5), a nie przekształcona wartość (2.5.2012). Teraz, jak mam przekazać formularz, że wartość zmieniła się w jednostce?

Może istnieje też inny sposób to zrobić w międzyczasie:

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

PHP

To z Entity:

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

ten pochodzi z Wpisz:

$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

Poniżej zamieściłem odpowiedź, ale jeśli potrzebujesz więcej szczegółów, opublikuj kod dla swojego typu formularza i modelu i prawdopodobnie będę mógł uzyskać bardziej szczegółowe informacje. – MDrollette

Odpowiedz

11

Istnieją dwa sposoby modyfikowania formularzy i związanych z nimi danych. Możesz użyć zdarzeń formularzy, istnieje przykład ich użycia here lub możesz użyć DataTransformer, który jest wyjaśniony here

Z brzmienia twojego przypadku myślę, że DataTransformer ma najwięcej sensu. Reprezentujesz dane w obiekcie w jeden sposób, ale musisz przedstawić go w formularzu w inny sposób i odwrócić tę transformację po przesłaniu formularza. Jest to celem DataTransformer.

+0

Wielkie dzięki, "DataTransformer" wydaje się być dokładnie tym, czego szukam. – insertusernamehere

Powiązane problemy