2012-07-05 66 views
6

之前修改窗體值我有以下情況:Symfony2中:如何驗證

  • 表單字段類型date
  • dd.mm.YYYY
  • 驗證模式的輔助對象,輪流1212.07.20122.5納入02.05.2012

我的問題是:我在哪裏調用轉換輸入值的方法?

當我從set這個實體的方法調用它時,實際上這個值被改變了。但是當再次加載表單時(例如不完整的提交),會顯示舊值(如2.5),而不是轉換後的值(2.5.2012)。現在,我如何說明表單,實體內的值是否發生了變化?

也許有也是這樣做的,之間的另一種方式:

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

PHP

這是從實體

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

這是從

$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

我在下面發佈了一個答案,但如果您需要更多的細節,隨時發佈您的表單類型和模型的代碼,我可能會得到更具體的。 – MDrollette 2012-07-05 16:56:54

回答

11

有兩種方法可以修改表單和綁定到它們的數據。你可以使用表單事件,有一個使用here的例子,或者你可以使用一個DataTransformer來解釋here

從你的案例的聲音中,我認爲DataTransformer最有意義。您以一種方式在對象中表示數據,但您需要以不同方式在表單中呈現數據,並在提交表單時反轉該變換。這是DataTransformer的目的。

+0

非常感謝,'DataTransformer'似乎正是我正在尋找的。 – insertusernamehere 2012-07-09 08:46:34