如何在Zend Framework 2模型声明中添加File \ MimeType Validator [英] How to add File\MimeType Validator in Zend Framework 2 Model Declaration
本文介绍了如何在Zend Framework 2模型声明中添加File \ MimeType Validator的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
实际上,我正在开发一个简单的文件上传器.
Actually I'm developing a simple file uploader.
在ImageUploader.php文件中,我定义了getInputFilter函数,除非我尝试添加File \ MimeType验证器,否则所有工作都将进行:
In the ImageUploader.php file I define the getInputFilter function, all works unless I try to add a File\MimeType validator:
<?php
namespace Admin\Model;
use Zend\InputFilter\Factory as InputFactory;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;
use Zend\InputFilter\InputFilterInterface;
use Zend\Validator\File\MimeType; //tried also with use Zend\Validator\File;
[...]
public function getInputFilter()
{
[...]
$inputFilter->add($factory->createInput(array(
'name' => 'image',
'required' => true,
'validators' => array(
array(
'name' => 'MimeType', //tried also with File\MimeType
'options' => array(
'mimeType' => array('image/jpeg'),
),
),
),
)));
[...]
}
定义File \ Validator \ MimeType的正确方法是什么?
What's the correct way to define a File\Validator\MimeType?
谢谢.
推荐答案
这是我项目中的示例,具有其他一些有用的功能(例如重新命名):
Here is a sample from my project with a couple of other useful features (renaming for example):
use Zend\File\Transfer\Adapter\Http,
Zend\Validator\File\Size,
Zend\Validator\File\IsImage;
[...]
public function editAction() {
[...]
if ($request->isPost()) {
$params = $this->params()->fromPost();
$files = $this->params()->fromFiles();
$images = array();
if(!empty($files['main_image']['name'])) $images['main_image'] = $files['main_image']['name'];
if(!empty($files['detailed_image']['name'])) $images['detailed_image'] = $files['detailed_image']['name'];
if(!empty($images)) {
$adapter = new Http();
$size = new Size(array('max'=>1000000));
$is_image = new IsImage();
$image_errors = array();
foreach ($images as $field => $filename) {
$adapter->setValidators(array($size,$is_image), $filename);
if (!$adapter->isValid($filename)) {
$adapter_errors = $adapter->getMessages();
$errors = array();
foreach($adapter_errors as $key=>$row) {
$errors[] = $row;
}
if(!empty($errors)) {
array_push($image_errors, $errors);
$form->setMessages(array($field => $errors));
}
} else {
$adapter->setDestination(IMAGES_PATH);
$fileinfo = $adapter->getFileInfo();
preg_match('/.+\/(.+)/', $fileinfo[$field]['type'], $matches);
$extension = $matches[1];
$old_filename = $item->__get($field);
$new_filename = $item->id.'_'.$field.'.'.$extension;
$adapter->addFilter('File\Rename',
array(
'target' => IMAGES_PATH.$new_filename,
'overwrite' => true,
)
);
if($adapter->receive($fileinfo[$field]['name'])) {
if(!empty($old_filename) && $old_filename != $new_filename &&
file_exists(IMAGES_PATH.$old_filename)) {
unlink(IMAGES_PATH.$old_filename);
}
$params[$field] = $new_filename;
}
}
}
}
}
[...]
}
[...]
但是,可以对代码进行重构,以将逻辑移至某些库或模型.
The code however could be refactored to move the logic to some lib or model.
这篇关于如何在Zend Framework 2模型声明中添加File \ MimeType Validator的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文