AllowEmpty vs NotEmpty

jed*_*ung 6 php validation cakephp

这里是CakePHP的新手 - 我正在浏览网站上的文档,试图为我正在创建的模型设置一些基本的数据验证.这可能是我对CakePHP的许多问题中的第一个.

CakePHP Book中,验证规则似乎指定了两种不同的方法来确保字段不为空 - AllowEmptyNotEmpty.

问题 - 这两者之间是否存在切实差异?CakePHP声明验证规则应该出现在您的模型或控制器中 - 是否更适合模型,另一个适用于控制器?这本书没有说明这一点.我猜这是一个较旧的方法,它仍然存在?

是什么赋予了?我应该使用特定的一个或两个,还是不重要?

编辑:我决定检查CakePHP 1.3 类文档(检查allowEmpty属性的默认值),但它甚至没有出现.它不在源代码中......是否有我遗漏的东西?

Cha*_*rry 10

欢迎来到蛋糕.我希望你喜欢它.

这绝对是Cake的一个陌生方面.

notEmpty本身就是一条规则.您可以在$validation属性中定义它.您可以为此验证失败时分配消息.您可以将其视为任何其他验证规则.

allowEmpty是另一个验证规则的选项,通常不是 notEmpty. 它本身并不是验证规则. 例如,这将允许您定义varchar字段允许空字符串''或不超过20个字符的字符串.

编辑:

这是一些代码

// model validation using 'notEmpty'
$validation = array(
    'fieldName' => array(
        'notEmpty' => array(
            'rule' => 'notEmpty',
            'message' => 'This value may not be left empty!'
        ),
        ... // other rules can go here
    ),
    ... // other fieldName can go here
);


// model validation using 'allowEmpty' to create an optional field
$validation = array(
    'fieldName' => array(
        'maxLength' => array(
             'rule' => array('maxLength', 20),
             'message' => 'This field may only contain 20 characters!',
             'allowEmpty' => true    // we'll also accept an empty string
        ), 
        ... // other rules can go here
    )
    ... // other fieldName can go here
);
Run Code Online (Sandbox Code Playgroud)

  • 我很想知道默认情况下`allowEmpty`设置为`true`的位置.在挖掘了一些源代码后,它出现在`cake/libs/model/model.php`的第2549行,默认情况下`allowEmpty`设置为`null`(https://github.com/cakephp/cakephp/斑点/主/饼/库/模型/ model.php) (2认同)
  • 我一直在阅读你链接到的代码 - 他们的代码约定有点难以理解,但从目前为止我所知道的......如果`allowEmpty`为真且值确实是空的,模型将允许你所声明的一个空值(通过断开验证`if`块提前).如果`allowEmpty`为false且值为空,则模型将在不运行规则的情况下提前失败.看起来好像你没有定义`allowEmpty`,但是规则会运行,并且它不允许空值.据我所知,我认为这只是路径优化. (2认同)