schulzefelix/laravel-data-transfer-object

具有属性转换和日期转换器的数据传输对象。

1.5.2 2022-04-16 17:36 UTC

This package is auto-updated.

Last update: 2024-09-22 18:27:26 UTC


README

Latest Version Software License Build Status StyleCI Latest Version on Packagist Total Downloads

将Laravel属性转换和日期转换器引入对象。

安装

通过Composer

$ composer require schulzefelix/laravel-data-transfer-object

用法

介绍

访问器和修改器允许您在获取或设置对象实例的属性值时格式化属性值。

除了自定义访问器和修改器之外,它还可以自动将日期字段转换为 Carbon 实例。

访问器和修改器

定义访问器

要定义访问器,在您的对象上创建一个 getFooAttribute 方法,其中 Foo 是您希望访问的列的“studly”大小写名称。在这个例子中,我们将定义对 first_name 属性的访问器。访问器将在尝试检索 slug 属性值时自动调用

<?php

namespace App;

use SchulzeFelix\DataTransferObject\DataTransferObject;

class Project extends DataTransferObject
{
    /**
     * Get the objects URL friendly slug.
     *
     * @return string
     */
    public function getSlugAttribute()
    {
        return str_slug($value);
    }
}

定义修改器

要定义修改器,在您的对象上定义一个 setFooAttribute 方法,其中 Foo 是您希望访问的列的“studly”大小写名称。

<?php

namespace App;

use SchulzeFelix\DataTransferObject\DataTransferObject;

class Project extends DataTransferObject
{
    /**
     * Set the objects's title.
     *
     * @param  string  $value
     * @return void
     */
    public function serTitleAttribute($value)
    {
        $this->attributes['title'] = title_case($value);
    }
}

日期修改器

默认情况下,它将 created_atupdated_at 列转换为 Carbon 实例,该实例扩展了PHP的 DateTime 类,提供了一系列有用的方法。您可以自定义哪些日期将被自动修改

<?php

namespace App;

use SchulzeFelix\DataTransferObject\DataTransferObject;

class Project extends DataTransferObject
{
    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = [
        'date',
        'deleted_at'
    ];
}

如上所述,当检索在您的 $dates 属性中列出的属性时,它们将自动转换为 Carbon 实例,允许您在属性上使用Carbon的任何方法

return $project->deleted_at->getTimestamp();

属性转换

您的对象上的 $casts 属性提供了一种方便的方法来将属性转换为常见的数据类型。 $casts 属性应是一个数组,其中键是要转换的属性名称,值是要将属性转换为的类型。支持的类型有: integerrealfloatdoublestringbooleanobjectarraycollectiondatedatetimetimestamp

例如,让我们将 is_index 属性转换为布尔值,该属性被分配为字符串

<?php

namespace App;

use SchulzeFelix\DataTransferObject\DataTransferObject;

class Project extends DataTransferObject
{
    /**
     * The attributes that should be casted to native types.
     *
     * @var array
     */
    protected $casts = [
        'is_index' => 'boolean',
    ];
}

现在,当您访问它时,is_index 属性将始终转换为布尔值,即使底层值被设置为整数或字符串

if ($project->is_index) {
    //
}

序列化对象和集合

序列化为数组

要将对象及其嵌套对象和集合转换为数组,您应该使用 toArray 方法。此方法是递归的,因此所有属性都将转换为数组

return $project->toArray();

序列化为JSON

要将对象转换为JSON,您应该使用 toJson 方法。与 toArray 类似,toJson 方法也是递归的,因此所有属性和嵌套对象都将转换为JSON

return $project->toJson();

或者,您可以将对象或集合转换为字符串,这将自动在对象或集合上调用 toJson 方法

return (string) $project;

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

测试

$ vendor/bin/phpunit

贡献

请参阅贡献指南行为准则获取详细信息。

安全

如果您发现任何安全相关的问题,请通过电子邮件发送至githubissues@schulze.co,而不是使用问题跟踪器。

鸣谢

非常感谢Taylor Otwell和所有对Laravel做出贡献的人。

修改后的源代码来自Eloquent Model

文档修改自Laravel 文档

许可协议

MIT 许可协议(MIT)。有关更多信息,请参阅许可文件