Давайте начнем разбираться как Symfony работает с файлами на основе простого примера. У нас будет простая заготовка с формой. С помощью этой формы мы отправим файл и посмотрим, как Symfony его примет.
У нас будет 2 роута:
/** * @Route("/testFile", name="testFile") */ public function testFile() { return $this->render('main/test_form.html.twig'); } /** * @Route("/handleUpload", name="handleUpload") */ public function handleUpload(Request $request) { dd($request); }
И Twig шаблон, в котором будет находиться обычная HTML форма:
{% extends 'base.html.twig' %} {% block title %}Тестовая форма{% endblock %} {% block body %} <form method="POST" action="{{ path('handleUpload') }}" enctype="multipart/form-data"> <input class="input" type="file" name="image"> <button type="submit" class="button">Загрузить</button> </form> {% endblock %}
Эта форма будет отправлять данные методом post и в нем будет находится одно поле типа file, через которое мы будем загружать какой-то файл.
Данные отправленные через эту форму будут поступать внутрь роута handleUpload.
Внутри handleUpload мы принимаем http запрос, который придет с формы. И выводим результат на экран.
См. видео, чтобы увидеть, что собой представляет объект файла, который будет загружен с помощью этой формы.
Файлы, которые поступают с формы, информация о них будет располагаться в свойстве files отправленной сущности.Там будет находиться массив, со значениями тех файлов, которые были отправлены через форму.
Сам же отправленный файл располагается в особом объекте. Symfony, те файлы, которые к нему поступают, размещает и хранит в специальном объекте.
В этом объекте есть специальный атрибут path. Файл, который к нам поступил, он у нас размещается в специальную папку, эта папка является временной. Этот файл будет храниться во временной папке до тех пор пока запрос не обработается или не закроется.
Имя временного файла генерируется автоматически.
Ну, и можно видеть какие-то дополнительные свойства. Тип файла, размер и.т.д.
Первое, что нужно понять при работе с файлами Symfony. Это то, что Symfony отправляет в запросе файл в виде объекта, с которым мы можем в дальнейшем работать. Вот такой алгоритм.
Чтобы оставить сообщение, зарегистрируйтесь/войдите на сайт через:
Email - зарегистрироваться / войти
Или зарегистрируйтесь через социальные сети: