solophp / request-handler
Robust request validation & authorization layer for HTTP inputs with type-safe handlers and modern PHP 8+ architecture
Installs: 34
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/solophp/request-handler
Requires
- php: ^8.2
- psr/http-message: ^2.0
- solophp/contracts: ^1.0
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^12.3
- squizlabs/php_codesniffer: ^3.13
Suggests
- solophp/validator: ^2.2
README
Type-safe Request DTOs for PHP 8.2+ with automatic validation, type casting, and full IDE support.
Features
- 🎯 Attribute-based DTOs — Define request structures using
#[Field]attributes - 🔄 Automatic Type Casting — Built-in support for int, float, bool, string, array, DateTime
- ✅ Validation Rules — Expressive rules with route parameter placeholders
- ⚡ Generators — Auto-generate UUIDs, sequences, and custom values
- 🔧 Pre/Post Processing — Transform data before validation or after casting
- 📦 Field Grouping — Organize fields into logical groups
Installation
composer require solophp/request-handler
Quick Example
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; } // In controller $dto = $requestHandler->handle(CreateProductRequest::class, $request); $dto->name; // string - full IDE support $dto->price; // float - auto-casted $dto->id; // string - auto-generated UUID
Documentation
📖 Full Documentation
- Installation
- Quick Start
- Field Attribute
- Type Casting
- Processors
- Generators
- Validation
- API Reference
Requirements
- PHP 8.2+
- PSR-7 HTTP Message implementation
- Validator implementing
Solo\Contracts\Validator\ValidatorInterface
We recommend solophp/validator.
License
MIT License. See LICENSE for details.