Skip to content

spatie/laravel-data

laravel-data 包允许使用的丰富数据对象,比如:用它来代替表单请求、代替 API 转换器、作为 DTO(数据传输对象)等等。

安装

bash
composer require spatie/laravel-data

用法

创建数据对象

下面介绍最简单的创建和使用数据对象,更多高级用法请参考文档

php
use Spatie\LaravelData\Data;

class PostData extends Data
{
    public function __construct(
        public string $title,
        public string $content,
        public PostStatus $status,
        public ?CarbonImmutable $published_at
    ) {
    }
}
php
enum PostStatus: string
{
    case draft = 'draft';
    case published = 'published';
    case archived = 'archived';
}
php
$post = new PostData(
    'Hello laravel-data',
    'This is an introduction post for the new package',
    PostStatus::published,
    CarbonImmutable::now()
);

可选属性

有时数据对象具有不存在设置的属性,例如在部分 API 更新中,只想更新某些字段。

在这种情况下,可以创建 Spatie\LaravelData\Optional 属性:

php
use Spatie\LaravelData\Optional;

class SiteSettingData extends Data
{
    public function __construct(
        public string $title,
        public string|Optional $optional,
    ) {
    }
}

可以通过 from 方法初始化它:

php
SiteSettingData::from([
    'title' => 'Awesome website using laravel-data'
]);

数据嵌套

数据对象可以包含其他数据对象,例如一个站点设置包含通用设置 GeneralSettingData、通知设置 NotificationSettingData和外观设置 ApperanceSettingData

php

<?php

namespace App\Data;

use App\Domain\Support\Enums\ThemeApperance;
use Spatie\LaravelData\Data;

class SiteSettingData extends Data
{
    public function __construct(
        public GeneralSettingData $general,
        public NotificationSettingData $notification,
        public AppearanceSettingData $appearance,
    ) {
        //
    }
}

使用它的时候则可以通过这样

php
new SiteSettingData(
    new GeneralSettingData(
        //...
    ),
    NotificationSettingData::from(
        //...
    ),
    'appearance' => [
        'color' => 'auto',
        'theme' => 'simple',
        // ...
    ],
);