🎯
Attribute-based DTOs
Define request structures using
Transform HTTP requests into strictly typed DTOs with automatic validation, casting, and full IDE support.
use Solo\RequestHandler\Attributes\Field;
use Solo\RequestHandler\Request;
final class CreateProductRequest extends Request
{
#[Field(rules: 'required|string|max:255')]
public string $name;
#[Field(rules: 'required|numeric|min:0')]
public float $price;
#[Field(rules: 'nullable|integer|min:0')]
public int $stock = 0;
#[Field(generator: UuidGenerator::class)]
public string $id;
}
// POST/PUT/PATCH — from request body
$dto = $requestHandler->handleBody(CreateProductRequest::class, $request);
// GET — from query parameters
// $dto = $requestHandler->handleQuery(SearchRequest::class, $request);
echo $dto->name; // string - full IDE support
echo $dto->price; // float - auto-casted
echo $dto->id; // string - auto-generated UUIDcomposer require solophp/request-handlerRequirements: PHP 8.2+, PSR-7 HTTP Message