2013-10-13 28 views
1

我有一個簡單的窗體,我使用jquery UI日期選取器來輸入生日。symfony日期驗證本地化

並在服務器端我使用symfony驗證與日期驗證。

問題是驗證只接受這種格式輸入:YYYY-MM-DD

但在其他當地人喜歡在英國的格式爲:DD/MM/YYYY

和服務器對錯誤。

你有什麼建議嗎?

我使用symfony窗​​體對象與內部驗證, 所以我不希望強制手動更改格式。

回答

1

正如您可以從文檔「date」中閱讀的,約束日期僅執行驗證格式「YYYY-MM-DD」。

所以,你有兩個選擇:

一個(最簡單和最合乎邏輯的)是在表單字段「format」手動設置格式:

$builder->add('date', 'date', array(
    'widget' => 'single_text', 
    'format' => 'dd-MM-yyyy', 
)); 
這樣會形式

本身可以反轉日期並將正確的格式傳遞給驗證器(和數據庫)。

另一種是創建約束回調「callback」,並創建自己的驗證邏輯。

還有另一種方法,即使它被插入到字符串的鍵中,它也是約束正則表達式「regex」。

以這種方式,您將需要創建一個非常精確(和複雜)的正則表達式。

對於像第一個解決方案一樣簡單的問題是最合適的!

編輯:

jQuery UI的日期選擇器鎖定到輸入類型的文本,你不需要手動創建它。

正如我在例子中寫的,如果使用'widget' => 'single_text'會產生輸入類型的文本!

你可以設置一個類到日期字段,以便與jquery掛鉤。

簡單例子:

形式:

$builder->add('date', 'date', array(
    'widget' => 'single_text', 
    'format' => 'dd-MM-yyyy', 
    'attr' => array(
      'class' => 'your_class'), 
)); 

的javascript:

$(function() { 
    $(".your_class").datepicker(); 
}); 
+0

,如果我不使用symfony的形式日期格式。我使用jquery datepicker。 –

+0

請參閱編輯我的答案。 – Lughino