在CakePHP验证中,如果我有另一个规则如alphaNumeric且allowEmpty为false,是否需要notEmpty规则?

In CakePHP validation, do I need a notEmpty rule if I have another rule like alphaNumeric and allowEmpty is false?

如果我有一个验证规则,如

1
2
3
alphaNumeric' => array(
    'rule' => array('alphaNumeric'),
    'allowEmpty' => false),

是否需要有一个notEmpty规则?据我所知,allowEmpty被设置为false会将空值视为违反alphaNumeric规则,所以除了我想要定义两个不同的错误消息之外,是否还需要notEmpty规则?

(提出这个问题的另一种方式是:除了提供单独的自定义消息之外,是否有一些独立的notEmpty规则可以提供或必需的功能,我没有看到?)

要非常明确:我理解notEmpty是一个独立的规则,其中allowEmpty是规则的一个属性。那不是我的问题。我的问题是,添加notEmpty规则是否有任何需要或价值(除了它允许你拥有该规则的自定义消息),如果你已经有一个alphaNumeric(或其他类似的)规则,你可以添加allowEmpty = false到?除了独立的规则之外,规则与属性的作用有什么不同吗?


这实际上取决于您正在使用的"其他"规则。

您可以在CakePHP验证实用程序中准确查看每个规则实际检查的内容:

https://github.com/cakephp/cakephp/blob/44b7d013ae304a05699179bb4ea0077956c57e10/lib/Cake/Utility/Validation.php

例如,在该文件中,您可以看到alphanumiric检查:

1
2
3
4
5
6
7
8
9
10
public static function alphaNumeric($check) {
    if (is_array($check)) {
        extract(self::_defaults($check));
    }

    if (empty($check) && $check != '0') {
        return false;
    }
    return self::_check($check, '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/Du');
}

对于字母数字,您可以看到它已经有一个空检查,因此您不应该还需要allowEmpty => false规则。

最后,就您而言,我将其添加为单独规则时所看到的唯一好处是您可以向用户提供更好的错误消息。


请阅读... http://book.cakephp.org/2.0/en/models/model-attributes.html

模型属性允许您设置可以覆盖默认模型行为的属性,并且上下文中的规则是应用程序的业务逻辑。

您的问题的答案在于以下链接:
http://book.cakephp.org/2.0/en/models/data-validation.html#allowempty

实际上你是绝对正确的,如果你有一个字段,你必须应用多个验证,最终一个是非空的,在这种情况下你可以简单地使用allowEmpty => false。
但是,如果您的数据字段只需要一次非空检查验证,那么您应该使用nonEmpty来更好地理解您的代码!

我想我已经明白了......谢谢