2

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

模型文件.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),
        )
    )
);

如果图像为空,是否有办法跳过验证?

4

3 回答 3

2

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

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

    return true;
}
于 2012-09-18T19:12:40.923 回答
1

见以下网址

cakePHP 文件上传的可选验证

或者试试

"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,
    ...
 )

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

您可以创建一个可以处理此数组的自定义验证规则,或者您需要在控制器中进行更多处理,然后再尝试验证它

于 2012-09-18T19:07:03.687 回答
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作为我的主要文章。但是这个函数似乎不是一个默认的 cake 变量。上面的代码应该可以工作。

于 2012-09-18T19:00:40.210 回答