2012-01-20 100 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