Видео актуально для Symfony 7

Прежде чем мы приступим к работе с файлами на фреймворке Symfony, хотелось остановиться на базовых принципах, как можно работать с файлами на языке программирования PHP. 

О чем мы будем говорить, это относиться не только к Symfony, это относиться к общим принципам работы с файлами на PHP. 

Я подготовил небольшой пример. У нас есть 2 роута:

    #[Route('/testFile', name: 'testFile')]
    public function testFile(): Response
    {
        return $this->render('main/test_form.html.twig', []);
    }

 

    #[Route('/handleUpload', name: 'handleUpload')]
    public function handleUpload(Request $request): Response
    {
        dd($request);
    }

testFile будет выводить нам 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 %}

Это обычный элемент form, который отправляет данные методом post и отправляет эти данные в роут handleUpload. В этом роуте мы принимает наш запрос, в котором придут данные, отправленные из формы и смотрим, что к нам поступит.

В этой форме у нас только одно поле для загрузки файлов и кнопка загрузить.

В запросе, который к нам поступит, нас интересует раздел files. У нас там находится ключ image с загружаемой картинкой. 

Важный момент, если не указать атрибут enctype="multipart/form-data" для формы, в ключе files будет пусто. Этот атрибут является обязательным, чтобы сервер увидел прикрепленные файлы.

см. видео, чтобы посмотреть, что представляет собой полученный из формы файл.

Главное, что мы должны понять, что при загрузке файлов, он сохраняется во временную папку, храниться там ограниченное количество времени и сам файл просто представляет собой некий объект с данными. 

Таким образом происходит взаимодействие с файлами.