Атрибут MapQueryString
Атрибут MapQueryString вешается на параметр
метода контроллера и указывает Symfony, что этот
параметр нужно заполнить данными из query-строки
запроса. В качестве типа параметра выступает
пользовательский класс (DTO), свойства которого
соответствуют query-параметрам. Атрибут принимает
необязательное имя name - имя query-параметра,
внутри которого лежат данные. Если имя не указано,
значения берутся из query-строки напрямую.
Синтаксис
#[MapQueryString(name: name)]
Пример
Давайте создадим DTO SearchQuery с полями
term и page и примем данные из
query-строки в методе контроллера:
<?php
namespace AppDto;
class SearchQuery
{
public string $term = '';
public int $page = 1;
}
?>
<?php
namespace AppController;
use AppDtoSearchQuery;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelAttributeMapQueryString;
class ArticleController extends AbstractController
{
public function search(
#[MapQueryString] SearchQuery $query
): Response {
return new Response($query->term . ':' . $query->page);
}
}
?>
Результат выполнения кода для адреса /search?term=abcde&page=2:
abcde:2
Пример
Давайте прочитаем DTO из вложенного query-параметра
filter, указав имя в атрибуте:
<?php
namespace AppDto;
class FilterQuery
{
public string $term = '';
public bool $active = false;
}
?>
<?php
namespace AppController;
use AppDtoFilterQuery;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentHttpKernelAttributeMapQueryString;
class ArticleController extends AbstractController
{
public function filter(
#[MapQueryString(name: 'filter')] FilterQuery $query
): Response {
return new Response($query->term . ':' . ($query->active ? '1' : '0'));
}
}
?>
Результат выполнения кода для адреса /filter?filter[term]=abcde&filter[active]=1:
abcde:1
Смотрите также
-
атрибут
MapQueryParameter,
который привязывает отдельный query-параметр к аргументу -
атрибут
MapRequestPayload,
который преобразует тело запроса в объект DTO -
атрибут
MapEntity,
который загружает сущность по параметру маршрута -
атрибут
Cache,
который кеширует результат выполнения контроллера