2016-07-27 61 views
0

我的表正在拋出一個默認的「notEmpty」驗證錯誤,即使我沒有寫任何驗證的排序。CakePHP 3 - 試圖驗證notEmpty由於某種原因的蛋糕

在我的表類基本驗證:

public function validationDefault(Validator $validator) 
{ 
    return $validator->requirePresence('my_field', 'create', 'Custom error message'); 
} 

數據是集:

['my_field' => null] 

據我可以從文檔所知,這應該不是驗證失敗。

通過使用array_key_exists()來檢查密鑰的存在,以便空值將被視爲存在。

然而,什麼是真正發生的是驗證與消息失敗:

'my_field' => 'This field cannot be left empty' 

這是notEmpty()驗證函數Cake的默認消息,因此它在哪兒來的?我希望它允許空值。我的數據庫字段也允許NULL。

編輯

我設法通過增加allowEmpty()到該字段的驗證,以解決這一問題。因此,這似乎表明,Cake假設如果您的字段是必需的,您也希望它默認驗證notEmpty(),即使您沒有這樣說。

這直接違背了文檔線I以上表明:

密鑰存在通過使用array_key_exists(),以便空值將計爲存在檢查。

那麼文檔是否需要更新,或者它是一個錯誤?

+1

你能分享你的模型編碼嗎? –

+0

驗證錯誤發生,因爲字段在默認情況下不允許爲空,但與它們的存在是否需要無關,這是兩個不同的規則。如果文檔指出缺省情況下不允許空字段,這可能會有所幫助。 – ndm

+0

是的,我理解這兩種方法是如何工作的,但文檔需要說明這一點。我認爲,Cake會少一些假設,並且不會在沒有告訴你的情況下執行'notEmpty'規則。 – BadHorsie

回答

0

儘管在Cake 3文檔中沒有提及它,但默認情況下,不允許必填字段爲空,因此您必須明確指出要求字段爲空。

public function validationDefault(Validator $validator) 
{ 
    return $validator 
     ->requirePresence('my_field', 'create', 'Custom error message') 
     ->allowEmpty('my_field', 'create'); 
} 
+0

您似乎仍然對此有點混淆,這與是否需要字段呈現無關,「默認情況下不爲空」行爲適用於所有字段,即使是不需要的字段。 – ndm

+0

@ndm不,我不明白,但有人遇到同樣的問題可能會在獲取必填字段以允許爲null(正如我發佈的問題的主題)的上下文中回答。我知道這兩條規則是分開的,而且沒有關係。在任何情況下,如果Cake默認允許爲空,以便應用程序可以定義自己的規則,而不是必須意識到並更改Cake默認爲您執行的規則,那麼可能會更好。 – BadHorsie