Давайте начнем разбираться как 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 отправляет в запросе файл в виде объекта, с которым мы можем в дальнейшем работать. Вот такой алгоритм.