Заметки WEB-разработчика

Полезные материалы для web-разработки

Создание формы загрузки файла в zend framework 2

Здесь показано как создать  форму загрузки файла в zend framework 2 на элементарном примере

Создание формы загрузки файла в zend framework 2


Application\src\Form\ContragetnsLoadForm.php
namespace Application\Form;

use Zend\Form\Element;
use Zend\Form\Form;
use Zend\InputFilter;

class ContragetnsLoadForm extends Form
{
    public function __construct($name = null, $options = array())
    {
        parent::__construct($name, $options);
        $this->addElements();
        $this->addInputFilter();
    }

    public function addElements()
    {
        $file = new Element\File('xml-file');
        $file->setLabel('Загрузка файла contragents.xml')->setAttribute('id', 'xml-file');
        $this->add($file);
    }

    public function addInputFilter()
    {
        $inputFilter = new InputFilter\InputFilter();
        $fileInput = new InputFilter\FileInput('xml-file');
        $fileInput->setRequired(true);
        $fileInput->getValidatorChain()->attachByName('filemimetype',  array('mimeType' => 'text/xml, application/xml'));
        $inputFilter->add($fileInput);
        $this->setInputFilter($inputFilter);
    }

}


Application\view\application\index\index.phtml
<? $form->prepare();?>
<?=$this->form()->openTag($form); ?>
<div class="form-element">
  <? $fileElement = $form->get('xml-file'); ?>
  <?=$this->formLabel($fileElement); ?>
  <?=$this->formFile($fileElement); ?>
  <span style="color: red"><?=$this->formElementErrors($fileElement); ?></span>
</div>
<button>Submit</button>
<?=$this->form()->closeTag(); ?>


Application\src\Controller\IndexController.php
public function uploadFormAction()
{
    $form = new ContragetnsLoadForm('xml-file');
    
    $request = $this->getRequest();
    
    if ($request->isPost()) {
        $post = array_merge_recursive(
            $request->getPost()->toArray(),
            $request->getFiles()->toArray()
        );
    
        $form->setData($post);
        if ($form->isValid($post['xml-file']['name'])) {
            $data = $form->getData();
            if(!copy($data['xml-file']['tmp_name'], $name_file)){
                die('Не удалось скопировать файл ' . $name_file . ', проверьте права на диреторию');
            }
        }
    }
    
    return array('form' => $form);
}

Комментарии

Комментарии через Вконтакте