ZF RenameUpload 过滤器不起作用
ZF RenameUpload filter not working
我正在尝试上传一张非常基本的图片。这是我的输入过滤器文件:
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.
当我检查上传文件夹时,那里什么也没有。这不是文件系统问题,因为文件夹所有者与用户 运行 apache 相同;并且权限为 755.
我还注意到,如果我删除了它应该写入的文件夹,$form->isValid()
仍然 returns true
。
我做错了什么?
如果您想使用 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
...
}
我正在尝试上传一张非常基本的图片。这是我的输入过滤器文件:
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.
当我检查上传文件夹时,那里什么也没有。这不是文件系统问题,因为文件夹所有者与用户 运行 apache 相同;并且权限为 755.
我还注意到,如果我删除了它应该写入的文件夹,$form->isValid()
仍然 returns true
。
我做错了什么?
如果您想使用 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
...
}