Вложенные параметры
Вложенная структура задаётся ключом RouteConfig::PARAMETERS внутри описания параметра.
Для родителя используйте ParameterConfig::TYPE со значением TypeConfig::ARRAY.
Объект customer
└─ parameters
├─ name → правило поля customer.name
└─ lastName → правило поля customer.lastName
Список items
└─ parameters
└─ [0] → общая карта полей каждого элемента
├─ productId → правило поля items[i].productId
└─ name → правило поля items[i].name[0] в карте задаёт правила для всех элементов списка. Это не ограничение проверки первым элементом.
Объект
В parameters перечислите поля с настройками type, required, possibleValue и вложенными parameters.
// {"customer": {
// "name": "Иван",
// "lastName": "Иванов",
// "birthDate": "1990-05-21"
// }}
'customer' => [
ParameterConfig::TYPE => TypeConfig::ARRAY,
ParameterConfig::REQUIRED => true,
RouteConfig::PARAMETERS => [
'name' => [
ParameterConfig::TYPE => TypeConfig::STRING,
ParameterConfig::REQUIRED => true,
],
'lastName' => [
ParameterConfig::TYPE => TypeConfig::STRING,
ParameterConfig::REQUIRED => true,
],
'birthDate' => [
ParameterConfig::TYPE => TypeConfig::STRING,
ParameterConfig::REQUIRED => true,
],
],
],Список объектов
Для списка объектов обязательна дополнительная пара квадратных скобок [] внутри parameters. Она помещает карту полей в parameters[0], чтобы проверять каждый объект списка. Без этих скобок описывается один объект.
// {
// "items": [
// {
// "productId": 101,
// "name": "Термокружка",
// "price": 149900,
// "url": "https://example.ru/products/101/",
// "properties": {
// "color": "Чёрный",
// "warrantyMonths": 12
// }
// },
// {
// "productId": 102,
// "name": "Рюкзак",
// "price": 299900,
// "url": "https://example.ru/products/102/"
// }
// ]
// }
'items' => [
ParameterConfig::TYPE => TypeConfig::ARRAY,
ParameterConfig::REQUIRED => true,
RouteConfig::PARAMETERS => [
[ // Обязательные скобки: карта полей одного элемента списка
'productId' => [
ParameterConfig::TYPE => TypeConfig::INTEGER,
ParameterConfig::REQUIRED => true,
],
'name' => [
ParameterConfig::TYPE => TypeConfig::STRING,
ParameterConfig::REQUIRED => true,
],
// Цена в копейках
'price' => [
ParameterConfig::TYPE => TypeConfig::INTEGER,
ParameterConfig::REQUIRED => true,
],
'url' => [
ParameterConfig::TYPE => TypeConfig::STRING,
ParameterConfig::REQUIRED => false,
],
// Необязательные характеристики товара
'properties' => [
ParameterConfig::TYPE => TypeConfig::ARRAY,
ParameterConfig::REQUIRED => false,
RouteConfig::PARAMETERS => [
'color' => [
ParameterConfig::TYPE => TypeConfig::STRING,
ParameterConfig::REQUIRED => false,
],
'warrantyMonths' => [
ParameterConfig::TYPE => TypeConfig::INTEGER,
ParameterConfig::REQUIRED => false,
],
],
],
],
],
],Обязательность
required вложенного поля проверяется, только если передан родитель. Для обязательной структуры задайте required на каждом уровне.
Непустой possibleValue у родителя отключает проверку вложенных полей.
Ошибки содержат вложенные поля и индексы. Оба формата показаны в примере карты.