AllowEmpty vs NotEmpty

时间:2011-07-01 22:16:36

标签: php validation cakephp

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

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

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

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

编辑:我决定检查CakePHP 1.3 class documentation(检查allowEmpty属性的默认值),但它甚至都没有出现。它不在source code ......是否有我遗漏的东西?

3 个答案:

答案 0 :(得分: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
);

答案 1 :(得分:0)

它非常简单地在cakephp中进行服务器端验证
以下是同一字段的验证(noEmpty,maxlength)的代码。

'fieldName' => array(
'rule'    => array('maxLength', 20),
'message' => 'fieldName should be less than 20 characters',
'allowEmpty' => true
),
'fieldName' => array(
    'notEmpty' => array(
        'rule' => array('notEmpty'),
        'message' => 'Please enter field name',
     ),
),

答案 2 :(得分:0)

我发现了一个必须使用'allowEmpty'=>的案例false而不是rule => '不是空的'。我有一个带有上传输入(type ='file')的表单,其验证规则为notEmpty,并且即使调试器显示加载了文件[]数组,它仍然无法通过验证。当我删除'notEmpty'规则并设置allowEmpty => false,它工作,在没有选择文件时抛出错误,并在选择一个文件时接受它。 它必须与值为数组而不是文本值有关。