2014-08-29 55 views
0

我有一個日期時間字段,我使用jQuery的日期選擇器來選擇日期,在文本字段 (input [type = text)。Symfony2表單生成器PRE_SET_DATA將日期時間轉換爲字符串日期

當我想創建新記錄時,沒有問題。當我想編輯該記錄時,我必須將日期時間數據設置爲文本日期格式(Y-m-d)並打印到文本字段。

我的字段(orm.yml):

released_at: 
    type: datetime 
    nullable: true 

我的表單生成器:

$builder->add(
    'releasedAt', 
     null, 
     [ 
      'label' => 'Çıkış Tarihi', 
      'mapped' => false, // false because setting the datetime data in the controller 
      'attr' => ['class' => 'date-picker'] 
     ] 
); 

我的形式pre_set_data:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) { 
     $form = $event->getForm(); 
     $game = $event->getData(); 

     if ($game instanceof Game) { 
      $datetime = $game->getReleasedAt(); 
      $form->get('releasedAt')->setData(\Datetime::createFromFormat('Y-m-d', $datetime->format('Y-m-d'))); 
     } else { 
      return; 
     } 
    }); 

錯誤:

The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class DateTime. You can avoid this error by setting the "data_class" option to "DateTime" or by adding a view transformer that transforms an instance of class DateTime to scalar, array or an instance of \ArrayAccess.

這裏有什麼問題?

---- ----編輯

我也試過這樣:

$builder->add(
     'releasedAt', 
     'datetime', 
     [ 
      'label' => 'Çıkış Tarihi', 
      'date_widget' => 'single_text', 
      'date_format'=>'y-M-d', 
      'attr' => ['class' => 'date-picker'] 
     ] 
    ) 

但有一種觀點是表示時間的選擇和包裝了一個div各個領域。

我不想編輯日期時間表單視圖。

第一種方法對我更好。

謝謝!

回答

0

SOLUTION:

解決方案很簡單。

當我們看這個圖:

enter image description here

只要改變PRE_SET_DATA到POST_SET_DATA。

代碼:

$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) { 
    $form = $event->getForm(); 
    $game = $event->getData(); 

    if($game === null || $game->getId() === null) 
     return; 

    if ($game instanceof Game) { 
     $datetime = $game->getReleasedAt(); 
     $form->get('releasedAt')->setData($game->getReleasedAt()->format('Y-m-d')); 
    } 
}); 
+0

是什麼意思圖中的 「常態」? – 2015-07-10 10:16:43

相關問題