Intereting Posts

Как выполнить загрузку файлов в Zend Framework 2?

Я просматривал загрузку файлов в ZF2.

Я понимаю, что многие из вас подумают, что это слишком расплывчатый вопрос, но каков наилучший способ создания элементов формы, которые имеют немного больше обработки?

Кажется, я не могу понять, с чего начать. Я исключил обработку его в контроллере, так как это нарушит СУХИЕ принципы. Объект формы, похоже, не имеет места, чтобы «подключить» любой код. Помощник вида – это просто для представления, поэтому в этом нет смысла делать что-либо. Таким образом, это оставляет входной фильтр. Это тоже не так.

Меня направили к адаптерам передачи, но код выглядит так, как будто это не очень ZF2.

Мне жаль, что это такой неопределенный вопрос, и я надеюсь, что он попадет на симпатичные уши. Трудно изучить структуру, которая имеет очень мало документации и усугубляется тем фактом, что мои знания zend framework 1 немного тонкие, прогресс немного медленный.

Как только у меня будет хороший пример работы, я, возможно, найду место для публикации.

это просто:
[В вашем контроллере]

$request = $this->getRequest(); if($request->isPost()) { $files = $request->getFiles()->toArray(); $httpadapter = new \Zend\File\Transfer\Adapter\Http(); $filesize = new \Zend\Validator\File\Size(array('min' => 1000 )); //1KB $extension = new \Zend\Validator\File\Extension(array('extension' => array('txt'))); $httpadapter->setValidators(array($filesize, $extension), $files['file']['name']); if($httpadapter->isValid()) { $httpadapter->setDestination('uploads/'); if($httpadapter->receive($files['file']['name'])) { $newfile = $httpadapter->getFileName(); } } } 

UPDATE : я нашел лучший способ использовать проверку файлов с помощью проверки формы:
Добавьте этот класс в свой модуль, например: Application / Validators / File / Image.php

 <?php namespace Application\Validators\File; use Application\Validator\FileValidatorInterface; use Zend\Validator\File\Extension; use Zend\File\Transfer\Adapter\Http; use Zend\Validator\File\FilesSize; use Zend\Filter\File\Rename; use Zend\Validator\File\MimeType; use Zend\Validator\AbstractValidator; class Image extends AbstractValidator { const FILE_EXTENSION_ERROR = 'invalidFileExtention'; const FILE_NAME_ERROR = 'invalidFileName'; const FILE_INVALID = 'invalidFile'; const FALSE_EXTENSION = 'fileExtensionFalse'; const NOT_FOUND = 'fileExtensionNotFound'; const TOO_BIG = 'fileFilesSizeTooBig'; const TOO_SMALL = 'fileFilesSizeTooSmall'; const NOT_READABLE = 'fileFilesSizeNotReadable'; public $minSize = 64; //KB public $maxSize = 1024; //KB public $overwrite = true; public $newFileName = null; public $uploadPath = './data/'; public $extensions = array('jpg', 'png', 'gif', 'jpeg'); public $mimeTypes = array( 'image/gif', 'image/jpg', 'image/png', ); protected $messageTemplates = array( self::FILE_EXTENSION_ERROR => "File extension is not correct", self::FILE_NAME_ERROR => "File name is not correct", self::FILE_INVALID => "File is not valid", self::FALSE_EXTENSION => "File has an incorrect extension", self::NOT_FOUND => "File is not readable or does not exist", self::TOO_BIG => "All files in sum should have a maximum size of '%max%' but '%size%' were detected", self::TOO_SMALL => "All files in sum should have a minimum size of '%min%' but '%size%' were detected", self::NOT_READABLE => "One or more files can not be read", ); protected $fileAdapter; protected $validators; protected $filters; public function __construct($options) { $this->fileAdapter = new Http(); parent::__construct($options); } public function isValid($fileInput) { $options = $this->getOptions(); $extensions = $this->extensions; $minSize = $this->minSize; $maxSize = $this->maxSize; $newFileName = $this->newFileName; $uploadPath = $this->uploadPath; $overwrite = $this->overwrite; if (array_key_exists('extensions', $options)) { $extensions = $options['extensions']; } if (array_key_exists('minSize', $options)) { $minSize = $options['minSize']; } if (array_key_exists('maxSize', $options)) { $maxSize = $options['maxSize']; } if (array_key_exists('newFileName', $options)) { $newFileName = $options['newFileName']; } if (array_key_exists('uploadPath', $options)) { $uploadPath = $options['uploadPath']; } if (array_key_exists('overwrite', $options)) { $overwrite = $options['overwrite']; } $fileName = $fileInput['name']; $fileSizeOptions = null; if ($minSize) { $fileSizeOptions['min'] = $minSize*1024 ; } if ($maxSize) { $fileSizeOptions['max'] = $maxSize*1024 ; } if ($fileSizeOptions) { $this->validators[] = new FilesSize($fileSizeOptions); } $this->validators[] = new Extension(array('extension' => $extensions)); if (! preg_match('/^[a-z0-9-_]+[a-z0-9-_\.]+$/i', $fileName)) { $this->error(self::FILE_NAME_ERROR); return false; } $extension = pathinfo($fileName, PATHINFO_EXTENSION); if (! in_array($extension, $extensions)) { $this->error(self::FILE_EXTENSION_ERROR); return false; } if ($newFileName) { $destination = $newFileName.".$extension"; if (! preg_match('/^[a-z0-9-_]+[a-z0-9-_\.]+$/i', $destination)) { $this->error(self::FILE_NAME_ERROR); return false; } } else { $destination = $fileName; } $renameOptions['target'] = $uploadPath.$destination; $renameOptions['overwrite'] = $overwrite; $this->filters[] = new Rename($renameOptions); $this->fileAdapter->setFilters($this->filters); $this->fileAdapter->setValidators($this->validators); if ($this->fileAdapter->isValid()) { $this->fileAdapter->receive(); return true; } else { $messages = $this->fileAdapter->getMessages(); if ($messages) { $this->setMessages($messages); foreach ($messages as $key => $value) { $this->error($key); } } else { $this->error(self::FILE_INVALID); } return false; } } } 

Использовать в форме и добавить filterInput:

  array( 'name' => 'file', 'required' => true, 'validators' => array( array( 'name' => '\Application\Validators\File\Image', 'options' => array( 'minSize' => '64', 'maxSize' => '1024', 'newFileName' => 'newFileName2', 'uploadPath' => './data/' ) ) ) ) 

И в вашем контроллере:

  $postData = array_merge_recursive((array)$request->getPost(), (array)$request->getFiles()); $sampleForm->setData($postData); if ($sampleForm->isValid()) { //File will be upload, when isValid returns true; } else { var_dump($sampleForm->getMessages()); } 

Это старый вопрос, но если кто-то еще сюда попадет, я нашел эту хорошую статью:

Создание простой формы загрузки с проверкой файла

Это хорошее начало для работы с файлами в ZF2. 😉

Из того, что я спросил / видел в irc (# Zftalk.2), компонент файла еще предстоит реорганизовать

для извлечения $ _FILES, вы делаете следующее в контроллере:

 $request= $this->getRequest(); if($request->isPost()){ $post= array_merge_recursive($request->getPost()->toArray(), $request->getFiles()->toArray()); print_r($post); } 

Этот пост старый, но я надеюсь, что это поможет кому-то.

Загрузку и завершение загрузки файлов планируется на ZF2.1

В то время как я использую $ _FILES 🙁

Проверьте следующие ссылки: