Como adicionar File \ MimeType Validator na Declaração do Modelo Zend Framework 2

Na verdade, estou desenvolvendo um simples carregador de arquivos.

No arquivo ImageUploader.php eu defino a function getInputFilter, tudo funciona a menos que eu tente adicionar um validador File \ MimeType:

add($factory->createInput(array( 'name' => 'image', 'required' => true, 'validators' => array( array( 'name' => 'MimeType', //tried also with File\MimeType 'options' => array( 'mimeType' => array('image/jpeg'), ), ), ), ))); [...] } 

Qual é a maneira correta de definir um File \ Validator \ MimeType?

Agradeço antecipadamente.

Aqui está uma amostra do meu projeto com alguns outros resources úteis (renomeando, por exemplo):

 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; } } } } } [...] } [...] 

No entanto, o código poderia ser refatorado para mover a lógica para algum lib ou modelo.

Não tenho certeza de qual versão você está usando agora, mas com o Zendframework 2.4 você pode fazer isso agora. Espero que isto ajude.

 public function getInputFilter() { if (!$this->inputFilter) { $inputFilter = new InputFilter(); $inputFilter->add(array( 'name' => 'fileupload', 'required' => true, 'allow_empty' => false, 'filters' => array( array('name' => 'StripTags'), array('name' => 'StringTrim'), ), 'validators' => array( array( 'name' => 'Zend\Validator\File\UploadFile', 'name' => 'Zend\Validator\File\MimeType', 'options' => array( 'mimeType' => 'audio, video, image', ), ), ), )); $this->inputFilter = $inputFilter; } return $this->inputFilter; }