2013-03-26 52 views
1

客戶端請求這個。他希望允許生日場的多種日期格式。該文檔沒有給我任何線索如何實現它,谷歌也沒有。允許在symfony2表單構建器中使用多種日期格式

誰曾經遇到過這樣的要求,並且領導如何做到這一點?

目前,它看起來像這樣:

$builder->add('xxx', 'birthday', array('widget' => 'single_text', 'invalid_message' => 'some message (dd-MM-yyyy)', 'format' => 'dd-MM-yyyy')) 

回答

1

如果你想在你的形式來處理不同的日期格式,你應該看看DataTransformer 它可以幫助你從一種格式轉換到另一個數據,例如:

2013-03-26 ==transform==> 2013/03/26 
2013.03.26 ==transform==> 2013/03/26 
26.03.2013 ==transform==> 2013/03/26 
1

數據變壓器應可以在這種情況下使用。

數據轉換器的要點是將數據來回之間view <=> norm <=> model

這不是你的情況,你不想要雙向轉換。

你需要的是對數據進行篩選,而對於這一點,你可以使用一個形式事件

$builder->add(
    $builder 
     ->create('xxx', 'birthday', [...]) 
     ->addEventListener(
      FormEvents::PRE_SUBMIT, 
      function(FormEvent $event) { 
       $value = $event->getData(); 
       // Do the filtering you want (for example replacement of special chars with a dash) 
       // $value = preg_replace('[^\d]', '-', $value) 
       $event->setData($value); 
      } 
     ) 
); 

和你做,篩選數據的PRE_SUBMIT事件,驗證之前。

我從內存中編寫了這個例子,並沒有測試它,也許你會適應它(並添加你的字段選項而不是[...]

相關問題