CakePHP空字段与非空字段验证

时间:2012-09-18 18:56:45

标签: php cakephp cakephp-2.0

我对文件有以下验证规则:

modelFile.php

public $validate = array(
    'image' => array(
        'maxWidth' => array(
            'rule' => array('maxWidth', 2000),
        ),
        'maxHeight' => array(
            'rule' => array('maxHeight', 2000),
        ),
        'extension' => array(
            'rule' => array('extension', array('gif', 'jpg', 'png', 'jpeg')),
        ),
        'filesize' => array(
            'rule' => array('filesize', 5120000),
        )
    )
);

如果图片为空,有办法跳过验证吗?

3 个答案:

答案 0 :(得分:2)

您可能需要调整图像是否为空/未上传的方式 - 我不确定我的图像是否正确。但我们的想法是检查并取消设置验证规则。

public function beforeValidate($options = array()) {
    if (empty($this->data[$this->alias]['image']['name'])) {
        unset($this->validate['image']);
    }

    return true;
}

答案 1 :(得分:1)

见以下网址

cakePHP optional validation for file upload

或尝试

"I assign $this->data['Catalog']['image'] = $this->data['Catalog']['imageupload']['name'];"

因此,当您保存数据数组时,我认为它看起来像这样:

array(
    'image' => 'foobar',
    'imageupload' => array(
        'name' => 'foobar',
        'size' => 1234567,
        'error' => 0,
        ...
     )
)

这意味着,imageupload验证规则正在尝试处理此数据:

array(
    'name' => 'foobar',
    'size' => 1234567,
    'error' => 0,
    ...
 )

即。它试图验证的价值是一系列东西,而不仅仅是一个字符串。这不太可能通过指定的验证规则。它也可能永远不会“空”。

要么创建可以处理此数组的自定义验证规则,要么在尝试验证之前需要在控制器中进行更多处理

答案 2 :(得分:0)

好的,据我所知,没有这样的代码可以在你的$ validate变量中设置它。所以你要做的就是:

在相应模型的beforeValidate中添加以下代码:

<?php   
# Check if the image is set. If not, unbind the validation rule
# Please note the answer of Abid Hussain below. He says the ['image'] will probably
# never be empty. So perhaps you should make use of a different way to check the variable
if (empty($this->data[$this->alias]['image'])){
    unset($this->validate['image']);
}

我使用http://bakery.cakephp.org/articles/kiger/2008/12/29/simple-way-to-unbind-validation-set-remaining-rules-to-required作为我的主要文章。但是这个函数似乎不是默认的蛋糕变量。上面的代码应该有效。