Download the PHP package julio-cavallari/laravel-dto without Composer
On this page you can find all versions of the php package julio-cavallari/laravel-dto. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download julio-cavallari/laravel-dto
More information about julio-cavallari/laravel-dto
Files in julio-cavallari/laravel-dto
Package laravel-dto
Short Description Laravel package to automatically generate DTOs from Form Request classes
License MIT
Homepage https://github.com/julio-cavallari/laravel-dto
Informations about the package laravel-dto
Laravel DTO Generator
A Laravel package that automatically generates Data Transfer Objects (DTOs) from Form Request classes, keeping them in sync with your validation rules.
Features
- 🚀 Automatic Generation: Generate DTOs from existing Form Request classes
- 🔄 Stay in Sync: Keep DTOs updated with Form Request changes
- 🛡️ Type Safe: Generate strongly typed DTOs with proper type hints
- 🎯 Immutable: Generate readonly DTOs for better data integrity
- 🏷️ Smart Enums: Automatically generate PHP 8.1+ enums from "in" validation rules
- ⚡ Fast: Efficient parsing and generation
- 🔧 Configurable: Customize namespaces, paths, and generation options
Installation
You can install the package via composer:
Optionally, you can publish the config file:
Usage
Basic Usage
Generate DTOs for all Form Requests:
Generate DTO for a specific Form Request:
Checking DTO Status
Check which Form Requests have corresponding DTOs:
Command Options
--force: Force regenerate existing DTOs--dry-run: Preview changes without writing files--enhance-requests: Add toDto() method to Form Requests using trait
Example
Given this Form Request:
The package will generate this DTO:
And automatically generate these enums:
Automatic Enum Generation
The package intelligently detects in validation rules and automatically generates PHP 8.1+ backed enums:
Smart Detection
Enums are created when validation rules meet these criteria:
- Contains an
inrule (e.g.,in:draft,published,archived) - Has between 2-10 values (configurable)
- Values are not large numeric IDs (to avoid enum pollution)
Enum Types
- String values: Creates
stringbacked enums - Integer values: Creates
intbacked enums - Mixed values: Creates
stringbacked enums (casts integers to strings)
Examples
Enum Configuration
Configure enum generation in the config file:
Usage in Controllers
Enhanced Form Requests with toDto() Method
You can enhance your Form Requests to include a convenient toDto() method using the provided trait and interface:
This will automatically add the ConvertsToDto trait and HasDto interface to your Form Requests:
Now you can easily convert requests to DTOs:
The trait automatically:
- Resolves the correct DTO class name based on conventions
- Validates that the DTO class exists
- Calls the
fromRequest()method to create the DTO - Provides helpful error messages if something goes wrong
Custom DTO Class with UseDto Attribute
By default, the package uses naming conventions to determine the DTO class name (e.g., CreateArticleRequest → CreateArticleData). You can customize this using the UseDto attribute:
Now when you call $request->toDto(), it will return an instance of ArticleCreationData instead of the default CreateArticleData.
You can also use fully qualified class names:
Benefits of using UseDto:
- ✅ Custom naming conventions
- ✅ Reuse existing DTO classes
- ✅ Better organization of DTOs
- ✅ Type safety with class-string parameter
Configuration
You can customize the package behavior by editing the config file:
Type Mapping
The package automatically infers PHP types from Laravel validation rules:
| Validation Rule | PHP Type | Notes |
|---|---|---|
string |
string |
|
integer |
int |
|
numeric |
float |
|
boolean |
bool |
|
array |
array |
|
file |
Illuminate\Http\UploadedFile |
|
date |
Carbon\Carbon |
|
in:val1,val2 |
App\Enums\FieldEnum |
Auto-generates enum for suitable values |
nullable |
Adds ? prefix |
Makes type nullable |
Requirements
- PHP 8.2+
- Laravel 11.0+
Testing
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
- Julio Cavallari
- All Contributors
License
The MIT License (MIT). Please see License File for more information.
All versions of laravel-dto with dependencies
laravel/framework Version ^11.0|^12.0
illuminate/console Version ^11.0|^12.0
illuminate/support Version ^11.0|^12.0