ZF RenameUpload过滤器无法正常工作

时间:2017-04-26 12:53:33

标签: php zend-framework zend-framework2 zend-form zend-filter

我试图上传图像,非常基本。这是我的输入过滤器文件:

namespace MyNamespace;

use Zend\InputFilter\InputFilter;
use Zend\Filter\StringTrim;
use Zend\Filter\StripTags;
use Zend\Filter\File\RenameUpload;
use Zend\Validator\File\Size;
use Zend\Validator\File\MimeType;

class MyFilter extends InputFilter 
{
    public function __construct()
    {
        $this->add(
            [
                'name' => 'image',
                'required' => true,
                'filters' => [
                    [
                        /* 'name' => RenameUpload::class, */
                        'name' => 'filerenameupload',
                        'options' => [
                            'target' => './data/uploads/images/.ext',
                            'overwrite' => true,
                            'randomize' => true,
                            'use_upload_extension' => true,
                        ]
                    ]
                ],
                'validators' => [
                    [
                        'name'    => Size::class,
                        'options' => [
                            'max' => '10MB',
                        ],
                    ],
                    [
                        'name' => MimeType::class,
                        'options' => [
                            'mimeType' => [
                                'image/jpg',
                                'image/jpeg',
                                'image/png'
                            ]
                        ],
                    ],
                ],
            ]
        );
    }
...

我检查了$request->getFiles()->toArray(),上传的图片就在那里。在控制器中我做:

$postData = array_merge (
    $this->request->getPost()->toArray(),
    $this->request->getFiles()->toArray()
);

$form = new MyForm;
$form->setInputFilter(new MyFilter);
$form->setData($postData);

$form->isValid()                      // this returns true.

当我检查uploads文件夹时,没有任何内容。它不是文件系统问题,因为文件夹所有者与运行apache的用户相同;权限是755。

我还注意到,如果我删除了它要写入的文件夹,$form->isValid()仍会返回true

我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果要使用 RenameUpload 过滤器,请提供正确的上传目录。如下所示

'./data/upload/images/'

使用 array_merge_recursive()而不是 array_merge()。因为 array_merge() orverrides类似的数组键(只保留最后一个)。

这会将图像上传到 RenameUpload 过滤器指定的目标。

<?php

...

if($form->isValid()) {
    // Move uploaded file to the assigned directory.
    $data = $form->getData();

    // Do other stuff
    ...
}