2010-02-21 38 views
2

我使用下面的Widget symfony的日期,以允許用戶輸入一個日期驗證使用sfValidatorSchema

$this->widgetSchema['first_registration'] = new sfWidgetFormDate(array(
    'format' => '%month%/%year%', 
    'years' => range(date('Y', time()) - 15, date('Y', time()) + 15) 
)); 

使用這個小部件的日期的默認格式爲%,當月%/%天%/ %year%,所以這就是這個小部件的默認驗證器檢查的內容。不過,我已經嘗試改變驗證...

$this->validatorSchema['first_registration'] = new sfValidatorDate(array(
    'date_format' => '%month%/%year%', 
    'with_time' => false 
)); 

這不是工作,我仍然得到一個無效的錯誤。有人知道爲什麼嗎?

回答

3

您的小部件和驗證器仍然包含日期字段。

所有格式參數的作用都是爲了防止顯示日子 - 它仍然存在並且正在後臺驗證。我期望這是問題發生的地方。

我建議最簡單的修復方法是將默認的日期設置爲1,方法是在表單上覆蓋綁定方法。不知道你是怎麼做的,但是當我使用月/年的日期時,我經常在數據庫中這樣做,因爲它允許本地日期/時間格式正確工作 - 這同樣適用於symfony表單。

// untested code - i may have array structure/method signatures incorrect. 
function bind($taintedValues = array(), $taintedFiles = array()) { 
    $taintedValues['first_registration']['day'] = 1; 
    return parent::bind($taintedValues, $taintedFiles); 
} 

另外,對於sfValidatorDate以date_format選項接受一個正則表達式作爲其參數,如在sfWidgetFormDate不使用的格式。

+0

謝謝,得到它的工作! – aaronfalloon 2010-02-21 15:12:47

+0

酷 - 很高興幫助! :) – benlumley 2010-02-21 15:49:12