juststeveking / laravel-data-object-tools
一套使Laravel中处理数据传输对象(DTO)更轻松的工具
2.0.0
2024-09-10 08:27 UTC
Requires
- php: ^8.1
- eventsauce/object-hydrator: ^0.4.3
- illuminate/contracts: ^9.22|^10.0|^11.0
- illuminate/support: ^9.22|^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.1
- orchestra/testbench: ^7.6
- pestphp/pest: ^1.21
- phpstan/phpstan: ^1.8
README
此包旨在成为一套工具,以帮助更轻松地处理DTO。它包括一个Artisan命令来生成DTO,以及一个门面来帮助您填充它们。
安装
composer require juststeveking/laravel-data-object-tools
使用
要生成一个新的DTO,您只需运行以下Artisan命令
php artisan make:dto MyDto
这将生成以下类: app/DataObjects/MyDto.php
。默认情况下,此类将是一个final
类,实现了DataObjectContract
接口,强制执行一个toArray
方法,以便您可以轻松地将DTO转换为数组。
但是,如果您使用的是PHP 8.2,则默认会生成一个readonly
类,这样您就不必声明每个属性为readonly。
要使用填充功能,您可以使用Laravel的DI容器或现成的门面。
使用容器
class StoreController { public function __construct( private readonly HydratorContract $hydrator, ) {} public function __invoke(StoreRequest $request) { $model = Model::query()->create( attributes: $this->hydrator->fill( class: ModelObject::class, parameters: $request->validated(), )->toArray(), ); } }
要使用门面,您可以执行类似操作
class StoreController { public function __invoke(StoreRequest $request) { $model = Model::query()->create( attributes: Hydrator::fill( class: ModelObject::class, parameters: $request->validated(), )->toArray(), ); } }
对象填充
底层,此包使用一个由EventSauce创建的包,由Frank de Jonge创建。它可能是我找到的最好的用于在PHP中优雅地填充对象的包。如果您想了解使用该包能够做什么以满足您的需求,请参阅文档。
测试
要运行测试套件
composer run test
致谢
LICENSE
MIT许可证(MIT)。有关更多信息,请参阅许可文件。