CakePHP不验证字段

时间:2012-01-20 00:16:44

标签: validation cakephp cakephp-2.0

所以我使用CakePHP 2.0.5。

我的模特:

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"=>"")))

它不会对用户名字段执行验证并在数据库中保存为空,即使我在我的模型中规定用户名值不能为空。那我错了?

2 个答案:

答案 0 :(得分:2)

根据this page,它应该是:

'rule' => 'notEmpty'

(注意'notEmpty'周围缺少一个数组)

尽管CakePHP书中的一些地方(上图)显示了这一点,但我个人喜欢这样做,因为它似乎遵循其余的验证惯例(并且在整本书的许多地方都有展示)以及):

'allowEmpty' => false,

其次,您需要了解“allowEmpty / notEmpty”和“required”之间的区别。根据{{​​3}}:

  

required和allowEmpty之间的区别可能令人困惑。   'required'=> true表示如果没有,则无法保存模型   该字段的密钥出现在$ this->数据中(检查是   用isset执行);而','allowEmpty'=>错误确保   如上所述,当前字段值是非空的。

基本翻译:'required'表示您保存该项目的任何时候,您必须包含该字段。虽然'allowEmpty'等等意味着如果你通过那个字段,它就不能为空。

答案 1 :(得分:0)

验证规则中需要required => true,如果未提供用户名密钥,则验证将失败。我建议将它与on => create配对,这样就很有可能在创建行时发生。

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

));