2014-07-04 28 views
0

我有一個允許爲空的數字輸入字段,但如果不是空的,我想返回驗證錯誤,例如輸入字母。Cakephp 2.5數字字段(int in db)並允許空不工作

此刻,如果我刪除允許空驗證工作就好了數字和notEmpty,但這個領域是可選的我該如何解決這個問題?

這裏是我的模型驗證:

'tickets' => array(
    'numeric' => array(
     'rule' => 'numeric', 
     'message' => 'Please enter only numbers', 
     'allowEmpty' => true, 
    ), 
), 

再次,如果我設置allowEmpty爲false這個按預期工作。我一直在通過分離規則來玩弄它,但到目前爲止沒有運氣。任何幫助表示讚賞。

回答

1

您指定「允許爲空」和「可選」,這樣可以讓我認爲您所追求的內容實際上是required,您應該將其設置爲false。

required => true並不意味着與驗證規則notEmpty()相同。 required => true表示數組鍵必須存在 - 這並不意味着它必須有一個值。因此,如果該字段不存在於數據集中,則驗證將失敗,但如果提交的值爲空(''),則可能(取決於規則)成功。

所以

'tickets' => array(
    'numeric' => array(
     'rule' => 'numeric', 
     'message' => 'Please enter only numbers', 
     'allowEmpty' => true, 
     'required' => false, 
    ) 
), 

將意味着它是確定的領域是「可選」(不包括在返回的數組中),如果包括它是「允許爲空」和如果它不是規則是「數字」。

+0

非常感謝您的回覆。但是我確實找到了問題的根源。問題在於cakephp使用表單助手在輸入字段上自動添加「輸入類型」。由於它是數據庫中的「類型INT」字段,因此它會添加一個「type」=>「number」,因此瀏覽器從不發送任何蛋糕數據來驗證是否鍵入了字母。現在,如果我將HTML輸入覆蓋爲「type」=>「text」(這是不準確的,因爲它是一個數字)現在數據被髮送到cakephp並進行驗證。也許您之前看過這個問題,還有其他建議嗎? – user3804467

+0

這不是問題,它是HTML5瀏覽器的一個相當新的特性。您絕對不應該相信瀏覽器或用戶會發送正確的數據,並始終驗證您的輸入。對於問題描述,我的回答是適當的。如果你的問題是如何繞過瀏覽器的字段驗證,請做你的研究,如果需要的話打開一個新的問題。 – user221931

相關問題