2012-11-25 119 views
1

我對模型字段的默認值有疑問,這個問題一直讓我發瘋。模型驗證規則的默認值

給你舉個例子,我有一個狀態字段的模型必須進行驗證:

$validate = array (
    ... 
    'status' => array(
     'list' => array(
      'rule' => array('inList', array('0','1')), 
      'allowEmpty' => true 
     ) 
    ) 
) 

插在數據庫中沒有從表單提交的數據。

如果狀態字段丟失,我希望它默認爲1,否則它必須被驗證。

有沒有辦法從模型做到這一點,而不使用自定義驗證規則?我知道我可以在MySQL表中設置默認值,但我仍然想從模型中驗證它,以防提交不同的值。

編輯

我看着Validation類代碼和INLIST驗證只是一個in_array檢查一個愚蠢的包裝:

Cake.Utility.Validation.php

public static function inList($check, $list, $strict = true) { 
    return in_array($check, $list, $strict); 
} 

你知道什麼,在CakePHP Api docs($ strict)中也沒有提到第三個參數,默認爲true。

從in_array文檔:

如果嚴格的第三個參數設置爲TRUE則in_array()函數 還將檢查該類型的針在草堆。

它仍然不能解決我的問題,但現在我知道爲什麼array('inList',array('0','1'))沒有驗證空字段,即使allowEmpty設置爲true。

謝謝。

回答

1

您可以使用beforeSave方法來設置默認值。不要忘記返回true,否則你會中止保存。

+0

即使我已經添加'allowEmpty'=> true,但它可以工作,但它不通過驗證規則。我也嘗試過:array('inList',array('','0','1')),但目前還沒有運氣。 –

+1

beforeValidate()如何? –

+0

嗯......沒有使用beforeValidate()與添加自定義驗證規則相同?但是,我同意沒有任何添加默認值的預定義方式,所以我會繼續您的建議並在beforeSave()中添加一個值。我也會像這樣修改inList規則:array('inList',array('0','1'),false),否則它不會驗證空字段。 –