Search by

lavreek / request-receiver

LAVREEK

Разложение параметров запроса с использованием Symfony HTTPFoundation.

Package info

github.com/Lavreek/Symfony.RequestReceiver

pkg:composer/lavreek/request-receiver

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.1 2026-08-07 12:51 UTC

This package is not auto-updated.

Last update: 2026-09-19 11:38:42 UTC


README

Работает через Reflection

Легковесное создание распределения параметров запроса в существующие DTO.

Установка

  • composer require lavreek/request-receiver

Использование

Использование тестировалось только в фреймворке Symfony [6, 7, 8].

Создание Request DTO

Создание объекта передачи данных.

Пример запроса:

{
  "token": "eyJ.eyJ.ZDQ"
}
  • TestRequest.php:
<?php

namespace App\DTO;

use LAVREEK\Library\Request\RequestReceive;

/**
 * Запрос параметров необходимых для валидации токена.
 */
class TestRequest extends RequestReceive
{
    /** @var string Проверяемый токен. */
    public string $token;
}
  • ApiController.php:
<?php

final class ApiController extends AbstractController
{
    #[Route('/jwt/validate', name: '_jwt_validate', methods: ['POST'])]
    public function validate(TestRequest $request): JsonResponse
    {
        // $request->token; // Использование доступного свойства класса.
        // $request->toArray(); // Получение всех параметров объекта в виде массива.
    }
}

В результате данного запроса, параметр запроса token попадёт в ПУБЛИЧНОЕ свойство класса TestRequest -> token.

На текущем этапе разработки public является обязательным условием использования.

Древовидная структура данных.

Использование древовидной структуры не совсем очевидно для рядового пользователя т.к. оно использует иное распределение. Request DTO используется для создания Request из глобального состояния.

{
    "token": "eyJ.eyJ.ZDQ",
    "meta": {
        "name": "name",
        "address": {
            "legal_address": "address"
        }
    }
}

При текущей структуре все последующие объекты в RequestReceive должны будут иметь зависимость от VariableReceive.

  • Повтор TestRequest.php: (Уровень 1)
<?php

namespace App\DTO;

use LAVREEK\Library\Request\RequestReceive;

/**
 * Запрос параметров необходимых для валидации токена.
 */
class TestRequest extends RequestReceive
{
    /** @var string Проверяемый токен. */
    public string $token;

    /** @var MetaRequest Метаданные пользователя. */
    public MetaRequest $meta;
}
  • MetaRequest.php: (Уровень 2)
<?php

namespace App\DTO;

use LAVREEK\Library\Request\VariableReceive;

/**
 * Запрос параметров необходимых для валидации метаданных.
 */
class MetaRequest extends VariableReceive
{
    /** @var string Имя. */
    public string $name;

    /** @var null|string Фамилия. */
    public ?string $surname = null;

    /** @var AddressRequest Адрес пользователя */
    public AddressRequest $address;
}
  • AddressRequest.php: (Уровень 3)
<?php

namespace App\DTO;

use LAVREEK\Library\Request\VariableReceive;

/**
 * Запрос параметров необходимых для валидации адреса.
 */
class AddressRequest extends VariableReceive
{
    /** @var string Адрес проживания. */
    public string $legal_address;

    /** @var null|string Фактический адрес. */
    public ?string $fact_address = null;
}

Использование метода toArray()

При использовании метода toArray от экземпяра RequestReceive можно получить весь объект в виде массива. Нулевые свойства будут добавлены в результирующий массив для дальнейшей валидации.

  • Пример ответа dd():
array:2 [
  "token" => "eyJ.eyJ.ZDQ"
  "meta" => array:3 [
    "name" => "name"
    "surname" => null
    "address" => array:2 [
      "legal_address" => "address"
      "fact_address" => null
    ]
  ]
]

Отличие RequestReceive от VariableReceive

RequestReceive

Создаёт экземпляр Request (HTTP Foundation) из глобальных параметров. Используя эти параметры от создаёт VariableReceive. Т.е. он берёт параметры запроса, которые пришли в тело Request и передаёт в VariableReceive.

VariableReceive

Распределяет параметры полученные посредством создания экземпляра. Используя распаковку массива он проверяет все параметры, которые получил на входе.

Своё мнение по улучшению или по возникающим багам можно создать issue или передать сюда: lavreeksolacki@yandex.ru