imjonos / laravel-base-dto
Laravel base DTO
Requires
- illuminate/support: ~5|~6|~7|~8|~9|~10|~11|~12|~13
This package is auto-updated.
Last update: 2026-04-09 17:07:54 UTC
README
A generic base DTO (Data Transfer Object) implementation for Laravel projects that provides a consistent and reusable way to handle data transformation and transfer between application layers. This package offers abstract classes and interfaces for creating DTOs and DTO collections with support for array and JSON transformations.
๐งฉ Overview
This package provides a complete DTO (Data Transfer Object) implementation for Laravel applications. It includes abstract classes and interfaces for creating DTOs and DTO collections with built-in support for data transformation between array and JSON formats. The implementation follows SOLID principles and provides a consistent way to handle data transfer between different layers of your application.
๐ Installation
Install the package via Composer:
composer require imjonos/laravel-base-dto
โ Usage
1. Create Your DTO Class
Create a new DTO class that implements DtoInterface and uses the provided traits for data transformation. Here's a complete example:
namespace App\DTO; use Nos\BaseDto\Interfaces\DtoInterface; use Nos\BaseDto\Traits\DataTransforms\ArrayDataTransformable; final class UserDTO implements DtoInterface { use ArrayDataTransformable; private function __construct( public string $name, public string $code, public int $numCode, public float $rate, ) {} public static function fromArray(array $data): self { return new UserDTO( $data['name'] ?? '', $data['email'] ?? '', ); } }
2. Create Your DTO Collection
Create a collection class for your DTOs:
namespace App\DTO; use Nos\BaseDto\DTOCollection; class UserCollection extends DTOCollection { protected function createDTO(array $array): UserDTO { return UserDTO::fromArray($array); } }
3. Use DTOs in Your Application
Transform data between different formats:
// Create DTO from array $userData = [ 'name' => 'John Doe', 'email' => 'john@example.com', 'created_at' => '2023-01-01 12:00:00' ]; $userDTO = UserDTO::fromArray($userData); // Convert DTO to array $array = $userDTO->toArray(); // Convert DTO to JSON $json = $userDTO->toJson(); // Work with collections $users = UserCollection::fromArray([$userData, $userData]); $users->each(fn ($user) => echo $user->name);
๐ง Available Features
DTO Interface
fromArray(array $data): Create DTO instance from array datatoArray(): Convert DTO to array formatfromJson(string $json): Create DTO instance from JSON stringtoJson(): Convert DTO to JSON string
DTO Collection
- Implements
IteratorandCountableinterfaces fromArray(array $data): Create collection from array datamap(callable $callback): Transform collection itemseach(callable $callback): Iterate through collection itemsfilter(callable $callback): Filter collection itemsfindBy(callable $callback): Find first item matching criteriafindByKey(int $key): Find item by index/keyfindByKeyAndValue(string $key, string $value): Find item by property value
๐ Project Structure
vendor/
โโโ imjonos/
โโโ laravel-base-dto/
โโโ src/
โ โโโ DTOCollection.php
โ โโโ Interfaces/
โ โ โโโ CollectionInterface.php
โ โ โโโ DtoCollectionInterface.php
โ โ โโโ DtoInterface.php
โ โ โโโ DataTransforms/
โ โ โโโ ArrayDataTransforms.php
โ โ โโโ JsonDataTransforms.php
โ โโโ Traits/
โ โโโ DataTransforms/
โ โโโ ArrayDataTransformable.php
โ โโโ JsonDataTransformable.php
๐ฆ Requirements
- PHP 8.0+
- Laravel 9+
- PHP Reflection extension (for property introspection)
๐งช Testing
DTOs are easy to test as they are simple data objects. You can write unit tests to verify data transformation methods and collection operations. The immutability and pure functions in DTOs make them predictable and reliable in tests.
๐ License
This package is open-sourced software licensed under the MIT license. Please see the license file for more information.
๐ Contributing
Please see contributing.md for details and a todolist.
๐ Features
- Type Safety: Uses PHP generics (via PHPDoc) for better IDE support and type checking
- Data Transformation: Built-in support for array and JSON transformations
- Collection Operations: Full-featured collection class with iterator support
- Extensible Design: Easy to extend with custom transformation logic
- Framework Agnostic Core: While designed for Laravel, the core DTO functionality can be used in any PHP project