Skip to content

Solo Request HandlerType-safe Request DTOs

Transform HTTP requests into strictly typed DTOs with automatic validation, casting, and full IDE support.

Solo Request Handler

Quick Example

php
use Solo\RequestHandler\Attributes\{Validate, Generator};
use Solo\RequestHandler\Attributes\Source\FromRoute;
use Solo\RequestHandler\Request;

final class UpdateProductRequest extends Request
{
    // PUT /products/{id}
    #[FromRoute]
    #[Validate('required|integer|exists:products,id')]
    public int $id;

    #[Validate('required|string|max:255')]
    public string $name;

    #[Validate('required|numeric|min:0')]
    public float $price;

    #[Validate('nullable|integer|min:0')]
    public int $stock = 0;

    #[Generator(UuidGenerator::class)]
    public string $sku;
}

$dto = $requestHandler->handleBody(
    UpdateProductRequest::class,
    $request,
    route: ['id' => $productId],
);

echo $dto->id;     // int — from URL path
echo $dto->name;   // string — from body
echo $dto->price;  // float — auto-casted
echo $dto->sku;    // string — auto-generated UUID

Installation

bash
composer require solophp/request-handler

Requirements: PHP 8.2+, PSR-7 HTTP Message

Released under the MIT License.