Mohamad-Zatar / laravel-dto-tools
一套用于在Laravel中简化数据处理对象(DTO)工作的工具
1.0.0
2024-08-23 13:09 UTC
Requires
- php: ^8.1
- eventsauce/object-hydrator: ^0.4.3
- illuminate/contracts: ^9.22|^10.0
- illuminate/support: ^9.22|^10.0
Requires (Dev)
- laravel/pint: ^1.1
- orchestra/testbench: ^7.6
- pestphp/pest: ^1.21
- phpstan/phpstan: ^1.8
This package is auto-updated.
Last update: 2024-09-23 14:05:12 UTC
README
本包提供了一套旨在简化数据处理对象(DTO)工作的工具。它包括用于生成DTO的Artisan命令,并包含一个门面,用于简化它们的填充。
安装
composer require mohamad-zatar/laravel-dto-tools
用法
要生成新的DTO,只需运行以下Artisan命令
php artisan make:dto MyDto
这将生成以下类:app/DataObjects/MyDto.php
。默认情况下,此类将是一个final
类,它实现了DataObjectContract
接口,强制执行一个toArray
方法,以便您可以轻松地将DTO转换为数组。
但是,如果您正在使用PHP 8.2或8.3,则默认会生成一个readonly
类,这样您就不必声明每个属性为readonly。
要使用填充功能,您可以使用Laravel的DI容器或现成的门面。
使用容器
class InventoryController { public function __construct( private readonly HydratorContract $hydrator, ) {} public function __invoke(InventoryRequest $request) { $model = Model::query()->create( attributes: $this->hydrator->fill( class: ModelObject::class, parameters: $request->validated(), )->toArray(), ); } }
要使用门面,您可以进行类似的操作
class InventoryController { public function __invoke(InventoryRequest $request) { $model = Model::query()->create( attributes: Hydrator::fill( class: ModelObject::class, parameters: $request->validated(), )->toArray(), ); } }
对象填充
在内部,此包使用由EventSauce创建的Frank de Jonge创建的包。它可能是我找到的最佳PHP对象填充包。如果您想查看如何使用此包来满足您的需求,可以在这里找到文档。
测试
要运行测试套件
composer run test
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。