无法验证缺少文件的mimetype

时间:2016-04-24 15:43:11

标签: cakephp upload cakephp-3.0

    <?php
        public function validationDefault(Validator $validator)
        {

             $validator->add('image', [
                'uploadError' => [
                    'rule' => 'uploadError',         
                    'message' => __d('Message', 'The logo upload failed.'),
                    'last' => true
                ],
                'mimeType' => [
                    'rule' => array('mimeType', array('image/gif', 'image/png', 'image/jpg', 'image/jpeg')),
                    'message' => __d('Message', 'Please upload images only (gif, png, jpg).')
                ],
                'fileSize' => [
                    'rule' => array('fileSize', '<=', '1MB'),
                    'message' => __d('Message', 'Logo image must be less than 1MB.')
                ],
            ])
            ->allowEmpty('image');

上述验证码出错了。

            $validator
                ->requirePresence('owner', 'create')
                ->notEmpty('owner');
            return $validator;
        }
    }
    ?>


Whats wrong with my validation code? when i comment the validation in image field it will save into database.,

enter image description here

但是当我不发表评论时,它总是会说&#34;无法验证mimetype是否缺少文件&#34;

2 个答案:

答案 0 :(得分:0)

试试这个

'image' => array(
    'uploadError' => array(
        'rule' => 'uploadError',         
        'message' => __d('Message', 'The logo upload failed.'),
        'last' => true,
        'allowEmpty' => true
    ),
    'mimeType' => (
        'rule' => array('mimeType', array('image/gif', 'image/png', 'image/jpg', 'image/jpeg')),
        'message' => __d('Message', 'Please upload images only (gif, png, jpg).'),
        'allowEmpty' => true
    ),
    'fileSize' => (
        'rule' => array('fileSize', '<=', '1MB'),
        'message' => __d('Message', 'Logo image must be less than 1MB.'),
        'allowEmpty' => true
    ),
)

您也可以使用extension规则来验证文件类型,如下所示:

'image' =>array(
    'extension' => array(               
        'rule' => array('extension',array('gif', 'png', 'jpg', 'jpeg'),
        'message' => __d('Message', 'Please upload images only (gif, png, jpg).')
    )
),

答案 1 :(得分:0)

我猜是其中一条规则是抛出异常(可能是mimeType),因为上传过程中出错。很多php级配置控制$ _FILES数组,其中一个设置是upload_max_filesize。因此,依赖于文件可用性的任何文件功能都将无法正常工作。

我的验证码有什么问题?

无。这是预期的行为,无论前一个验证规则是否失败,都会运行所有验证规则。因此,在您的情况下,将识别上传错误,但验证仍将继续执行下一个规则,然后由于没有上传文件而导致失败。

可以使用最后一个选项禁用此行为。将规则标记为最后将导致在该规则失败时停止验证该字段。

  'uploadError' => [
  'rule' => 'uploadError',
 'message' => __d('clients', 'The logo upload failed.'),
 'last' => true
 ],