juststeveking/laravel-data-object-tools

一套使Laravel中处理数据传输对象(DTO)更轻松的工具

2.0.0 2024-09-10 08:27 UTC

This package is auto-updated.

Last update: 2024-09-10 08:28:55 UTC


README

Latest Version PHP Version Tests Total Downloads

此包旨在成为一套工具,以帮助更轻松地处理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)。有关更多信息,请参阅许可文件