2012-01-20 101 views
1

所以我使用CakePHP 2.0.5。CakePHP不驗證字段

我的模型:

class User extends AppModel { 
public $name = 'User'; 
public $validate = array(
    'username' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A username is required' 
     ) 
    ));} 

然後我在控制器執行此操作,它工作正常,給我的錯誤,因爲該領域的用戶名是空的:

$this->User->create(); 
$this->User->save(array("User"=>array("username"=>""))) 

但是,如果我傳給其他命名的字段例如:

$this->User->create(); 
$this->User->save(array("User"=>array("something"=>""))) 

它不會對用戶名字段執行驗證並在da上保存空白tabase,即使我在我的模型中規定用戶名值不能爲空。所以我錯了?

+0

數據庫中的用戶名字段是否有默認值? – swiecki

+0

不,它沒有。 –

回答

2

根據this page,它應該是:

'rule' => 'notEmpty' 

(注意缺乏周圍一個「NotEmpty」的陣列的)

雖然示出的是方式(上述)中所述的CakePHP書幾個地方,我個人很喜歡做這樣的,因爲它似乎遵循驗證約定的其他(和貫穿全書的許多地方顯示爲好):

'allowEmpty' => false, 

其次,您需要了解「allowEmpty/notEmpty」和「required」之間的區別。根據this page

required和allowEmpty之間的區別可能會引起混淆。 'required'=> true表示如果沒有 密鑰,那麼您不能保存該模型,該字段出現在$ this-> data中(使用isset執行的檢查爲 );而'allowEmpty'=> false確保 當前字段值非空,如上所述。

基本翻譯:'required'表示任何時候你保存該項目,你必須包含該字段。雖然'allowEmpty'..等意味着如果你通過該字段,它不能爲空。

+0

是的,它是有點混亂。但感謝回覆,這很有幫助。 –

+0

@Ed - 很高興幫助! (我同意 - 最初幾次與此相關時,我感到非常困惑)提醒 - 如果其中任何一個答案幫助解決了您的問題,最好將其標記爲答案。 – Dave

0

您的驗證規則中需要required => true,如果未提供用戶名密鑰,則驗證將失敗。我建議將它與on => create配對,以便在行創建時發生。

$validate = array(
'username' => array(
    'not-empty' => array(
     'rule' => array('notEmpty'), 
     'message' => 'A username is required', 
     'required' => true, 
     'on' => 'create' 
    ), 

)); 
+0

謝謝你工作正常:) –

+0

它工作正常=接受其他答案:/ – Dunhamzzz