Data Transfer Objects with validation for Laravel applications
MIT License
Bot releases are visible (Hide)
Published by WendellAdriel over 1 year ago
If you want to use DTOs to wrap, type and transform your API responses, you can use the ResourceDTO
class.
This class will have the same features as the SimpleDTO
class and will implement the Illuminate\Contracts\Support\Responsable
interface:
class UserResourceDTO extends ResourceDTO
{
public string $name;
public string $email;
public int $age;
// Your DTO methods...
}
Then you can return your DTOs from your controllers:
class UserController extends Controller
{
public function show(int $id)
{
return UserResourceDTO::fromModel(User::findOrFail($id));
}
}
You can also return a collection/list of your DTOs as a response using the ResourceDTO::collection()
method:
class UserController extends Controller
{
public function index()
{
return UserResourceDTO::collection(User::all());
}
}
This way every item in the collection will be converted to a UserResourceDTO
instance before sending
the response to the client, using all the typing, casting and mapping features of your DTO class.
To generate a ResourceDTO
you can use the --resource
flag:
php artisan make:dto UserResourceDTO --resource
If you're using Laravel Livewire, you can turn your DTOs into wireable DTOs
by adding the WendellAdriel\ValidatedDTO\Concerns\Wireable
trait to your DTOs:
class UserDTO extends ValidatedDTO
{
use Wireable;
// Your DTO code...
}