Атрибут attributes класса Request
Атрибут attributes класса Request возвращает объект ParameterBag, который хранит дополнительные параметры запроса. Эти параметры не являются частью query (GET-параметры), request (POST-параметры), cookies или files. Они устанавливаются программно через метод set или автоматически при маршрутизации, когда в URL есть динамические сегменты. Атрибут attributes доступен только для чтения и возвращает объект ParameterBag, из которого можно извлекать значения через метод get.
Синтаксис
$request->attributes->get('key');
Пример
Давайте получим значение атрибута slug, который был передан через маршрут:
<?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 ArticleController extends AbstractController
{
#[Route('/article/{slug}', name: 'article_show')]
public function show(Request $request): Response
{
$slug = $request->attributes->get('slug');
return new Response($slug);
}
}
?>
Результат выполнения кода для адреса /article/abcde:
abcde
Пример
Давайте установим собственный атрибут в объект Request и затем извлечём его:
<?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 ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(Request $request): Response
{
$request->attributes->set('user', 'hello');
$user = $request->attributes->get('user');
return new Response($user);
}
}
?>
Результат выполнения кода:
hello
Пример
Давайте проверим наличие атрибута с помощью метода has:
<?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 ArticleController extends AbstractController
{
#[Route('/article/check', name: 'article_check')]
public function check(Request $request): Response
{
$request->attributes->set('key', 'abcde');
if ($request->attributes->has('key')) {
return new Response('attribute exists');
}
return new Response('attribute not found');
}
}
?>
Результат выполнения кода:
"attribute exists"