wendelladriel/laravel-validated-dto
Build typed Data Transfer Objects for Laravel that validate incoming data using familiar validation rules, defaults, and casting. Create DTOs by extending ValidatedDTO, define rules(), and get safe, validated, ready-to-use properties for your app.
Illuminate\Validation), making it a seamless fit for existing Laravel applications. It integrates with Laravel’s service container, dependency injection, and request handling (e.g., automatic DTO resolution from HTTP requests).DTOCast, ModelCast), enabling complex data structures without manual validation logic.final classes, preventing unintended modifications and promoting predictability.ValidatedDTO, define rules(), defaults(), and casts(). No need for external libraries like Symfony’s DTO bundles.UserDTO $dto in controllers).FormRequest validation logic.protected $casts = ['metadata' => AttributesDTO::class]).FormRequest or Eloquent models, there’s a risk of duplication. Mitigation: Use the defaults() method to centralize rule definitions or extend base DTOs.sometimes rules for optional fields to skip validation when unnecessary.DTOCast throws exceptions for invalid nested data). Mitigation: Pair with PHP 8.1+ typed properties and IDE static analysis.Validator::make()) may require refactoring. Mitigation: Incrementally replace validation logic with DTOs.FormRequest validation entirely, or coexist (e.g., DTOs for business logic, FormRequest for API contracts)?DTOCast for complex objects)? If so, test performance and error handling for deeply nested structures.EnumCast).Validator under the hood, ensuring consistency with Laravel’s validation system.php artisan import:users --file=users.json).Validator::make() in a service with a DTO.// Before
$validated = Validator::make($request->all(), [
'name' => 'required|string',
'email' => 'required|email',
])->validate();
// After
$dto = UserDTO::fromRequest($request);
FormRequest validation with DTOs for new features.CreateUserService accepts UserDTO).protected $casts = ['metadata' => ProfileDTO::class]).UserDTO::fromArray() with invalid data).composer require wendelladriel/laravel-validated-dto.php artisan vendor:publish --tag="validated-dto".UserDTO, OrderDTO).rules() methods.FormRequest or manual validation with DTO resolution in controllers.// Controller
public function store(UserDTO $dto) {
// $dto is automatically validated and cast
}
CreateUserService->handle(UserDTO $dto)).protected $casts = ['settings' => SettingsDTO::class]).toArray(), toModel()).rules() method.UserDTO clearly defines expected input structure).ValidationException), easing debugging."The 'email' must be a valid email address.").StringCast, IntegerCast).DTOCast for recursive structures). Mitigation: Benchmark and optimize critical paths.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Invalid input data | Validation exceptions (handled by Laravel). | Use try-catch or middleware to format errors consistently. |
| Malformed nested D |
How can I help you explore Laravel packages today?