Mohamad-Zatar/laravel-dto-tools

一套用于在Laravel中简化数据处理对象(DTO)工作的工具

1.0.0 2024-08-23 13:09 UTC

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)。请参阅许可证文件以获取更多信息。