Validation cakePHP文件上传的可选验证

Validation cakePHP文件上传的可选验证,validation,cakephp,file-upload,cakephp-1.3,Validation,Cakephp,File Upload,Cakephp 1.3,如何使文件上传作为可选的验证? 即使我没有选择任何文件,下面的代码也会进行验证。 仅当我选择了文件的扩展名时,我才想检查扩展名。 如果我没有选择任何文件,它将不会返回任何验证错误 class Catalog extends AppModel{ var $name = 'Catalog'; var $validate = array( 'name' => array( 'rule' => '/^[a-z0-9 ]{0,}$/i',

如何使文件上传作为可选的验证? 即使我没有选择任何文件,下面的代码也会进行验证。 仅当我选择了文件的扩展名时,我才想检查扩展名。 如果我没有选择任何文件,它将不会返回任何验证错误

class Catalog extends AppModel{
    var $name = 'Catalog';
    var $validate = array(
        'name' => array(
            'rule' => '/^[a-z0-9 ]{0,}$/i',
            'allowEmpty' => false,
            'message' => 'Invalid Catalog name'
        ),
        'imageupload' => array(
            'rule' => array('extension',array('jpeg','jpg','png','gif')),
            'required' => false,
            'allowEmpty' => true,
            'message' => 'Invalid file'
        ),
       );
}
提前谢谢

“我分配$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,
    ...
 )
也就是说,它试图验证的值是一个数组,而不仅仅是一个字符串。这不太可能通过指定的验证规则。它也可能永远不会“空”


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

概念:

在控制器中,在验证或保存(默认情况下自动进行验证)之前,检查是否上载了任何文件。如果未上载,则取消设置文件字段的验证程序

示例代码:

控制器

// is any image uploaded?
$isNoFileUploaded = ($this->request->data['Model']['field_name']['error'] == UPLOAD_ERR_NO_FILE) ? true : false ;
if ($isNoFileUploaded) {
    $this->Model->validator()->remove('field_name');
}
注意事项:


此解决方案作为

建议的两种可选方法之一(控制器中的预处理、模型中的自定义验证)进行预处理。您是否以任何方式预处理控制器中的
imageupload
字段?@deceze:对不起,您所说的预处理是什么意思???我只需要保存imagename,以便分配$this->data['Catalog']['image']=$this->data['Catalog']['imageupload']['name'];然后我会调用save,这就是我所说的预处理。哪一个是最佳实践???自定义验证或控制器中的一些其他处理。在保存数据之前,我个人会修改
$this->data
,尽管我认为自定义规则会更好地实践。