Атрибут query
Атрибут query вешается на аргумент метода контроллера и извлекает значение из параметров GET-запроса (строки запроса). Первым параметром передаётся имя параметра, значение которого нужно получить. Вторым параметром можно указать значение по умолчанию, если параметр отсутствует.
Синтаксис
#[query(name, default: value)]
Пример
Давайте получим параметр page из строки GET-запроса:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentHttpFoundationAttributeQuery;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(#[Query('page')] int $page): Response
{
return new Response('page: ' . $page);
}
}
?>
Результат выполнения кода для адреса /article?page=5:
"page: 5"
Пример
Давайте получим параметр name и укажем значение по умолчанию:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentHttpFoundationAttributeQuery;
class ArticleController extends AbstractController
{
#[Route('/user', name: 'article_user')]
public function user(#[Query('name', default: 'guest')] string $name): Response
{
return new Response('hello ' . $name);
}
}
?>
Результат выполнения кода для адреса /user?name=abcde:
"hello abcde"
Результат выполнения кода для адреса /user:
"hello guest"
Пример
Давайте получим несколько параметров одновременно:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
use SymfonyComponentHttpFoundationAttributeQuery;
class ArticleController extends AbstractController
{
#[Route('/article/list', name: 'article_list')]
public function list(
#[Query('page')] int $page,
#[Query('limit')] int $limit
): Response {
return new Response('page: ' . $page . ', limit: ' . $limit);
}
}
?>
Результат выполнения кода для адреса /article/list?page=2&limit=10:
"page: 2, limit: 10"
Смотрите также
-
класс
Request,
который представляет HTTP-запрос -
атрибут
request,
который передаёт данные POST-запроса -
атрибут
attributes,
который передаёт атрибуты маршрута -
метод
getQueryString,
который возвращает строку запроса целиком