schulzefelix / laravel-data-transfer-object
具有属性转换和日期转换器的数据传输对象。
Requires
- php: ^8.0.2
- illuminate/support: ^9.0
Requires (Dev)
- phpunit/phpunit: ^9.5.10
README
将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_at 和 updated_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 属性应是一个数组,其中键是要转换的属性名称,值是要将属性转换为的类型。支持的类型有: integer,real,float,double,string,boolean,object,array,collection,date,datetime 和 timestamp。
例如,让我们将 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)。有关更多信息,请参阅许可文件。