Атрибут files класса Request
Атрибут files класса Request содержит
массив загруженных файлов, которые пришли вместе
с HTTP-запросом. Ключами массива выступают имена
полей формы, а значениями - объекты класса
UploadedFile. Если поле формы называется
image, то обратиться к файлу можно так:
$request->files->get('image').
Свойство files является объектом
FileBag, который расширяет класс
ParameterBag. Это значит, что для работы
с ним доступны методы get, set,
has, all и другие.
Синтаксис
$request->files->get(string $key, mixed $default = null)
Пример
Давайте примем загруженный файл из поля image
и выведем его оригинальное имя:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UploadController extends AbstractController
{
#[Route('/upload', name: 'upload_file')]
public function upload(Request $request): Response
{
$file = $request->files->get('image');
if ($file === null) {
return new Response('no file');
}
return new Response($file->getClientOriginalName());
}
}
?>
Результат выполнения кода для файла abcde.png:
"abcde.png"
Пример
Давайте проверим, был ли файл загружен, с помощью
метода has и сохраним его в каталог
uploads:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UploadController extends AbstractController
{
#[Route('/upload', name: 'upload_file')]
public function upload(Request $request): Response
{
if (!$request->files->has('image')) {
return new Response('no file');
}
$file = $request->files->get('image');
$file->move(
$this->getParameter('kernel.project_dir') . '/uploads',
'article.png'
);
return new Response('uploaded');
}
}
?>
Результат выполнения кода:
"uploaded"
Пример
Давайте получим сразу несколько файлов из полей
images[] и выведем их имена:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class UploadController extends AbstractController
{
#[Route('/upload-many', name: 'upload_many')]
public function uploadMany(Request $request): Response
{
$files = $request->files->get('images');
$names = [];
foreach ($files as $file) {
$names[] = $file->getClientOriginalName();
}
return new Response(implode(', ', $names));
}
}
?>
Результат выполнения кода для файлов
abcde.png и hello.png:
"abcde.png, hello.png"