我对文件有以下验证规则:
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),
)
)
);
如果图片为空,有办法跳过验证吗?
答案 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作为我的主要文章。但是这个函数似乎不是默认的蛋糕变量。上面的代码应该有效。