imbue / data-transfer-object
1.0.0
2023-05-16 07:50 UTC
Requires
- php: ^7.1|~8.0
Requires (Dev)
- phpunit/phpunit: ^7.4
This package is auto-updated.
Last update: 2024-09-22 09:49:04 UTC
README
数据传输对象(DTO)设计模式(分布模式)的变体/解释。DTO只是一个可以包含一些数据的对象。最常见的是用于在系统层之间传输数据。
安装
您可以通过composer安装此包
composer require imbue/data-transfer-object
使用方法
介绍
使用getter/setter方法可以提供类型提示所有要设置的数据。因此,任何数据对象都将透明且易于使用,无需额外的文档,例如您正在编写的API客户端。
获取器 & 设置器
定义获取器
要定义获取器,只需在您的数据对象上创建一个get...()
方法
class BookData extends DataTransferObject { protected $title; protected $author; /** * @return string */ public function getTitle() { return $this->title; } /** * @return AuthorData */ public function getAuthor(): AuthorData { return $this->author; } }
定义设置器
要定义设置器,只需在您的数据对象上创建一个set...()
方法
class BookData extends DataTransferObject { protected $title; protected $author; /** * @param nullable|string $title */ public function setTitle(?string $title) { return $this->title; } /** * @param AuthorData $author */ public function setAuthor(AuthorData $author) { return $this->author; } }
序列化对象 & 集合
序列化到数组
要将值对象及其嵌套对象/集合转换为数组,您可以使用toArray
方法。此方法是递归的,因此所有属性都将转换为数组
return $dataObject->toArray();
序列化到JSON
要将值对象及其嵌套对象/集合转换为JSON对象,您可以使用toJson
方法。此方法是递归的,因此所有属性都将转换为JSON
return $dataObject->toJson();
集合
在某些情况下,您可能希望有一个包含多个数据对象的集合。通过扩展提供的DataTransferObjectColletion
类,您可以轻松设置一组DTO
$collection = new BooksCollection([ $bookOne, $bookTwo, $bookThree ]); $collection->toArray();
集合自动完成
通过重写current()
方法并设置返回值,您可以使用类型提示。
class BooksCollection extends DataTransferObjectCollection { public function current(): BookData { return parent::current(); } }
foreach ($booksCollection as $bookData) { $bookData-> // type hinting }
辅助函数
有几个辅助方法提供了一些额外的功能
only()
$dataObject ->only('title') ->toArray();
except()
$dataObject ->except('title') ->toArray();
不可变性
这些辅助函数是不可变的,这意味着它们不会影响原始的数据传输对象。
示例
使用数据对象尽可能简单
$book = new BookData(); $book->setTitle('Harry Potter: The Goblet of Fire'); $author = new Author(); // .... $book->setAuthor($author);
安全性
如果您发现任何与安全性相关的问题,请使用问题跟踪器。
测试
composer test
鸣谢
- 此包基于来自Spatie的data-transfer-object包。
Arr
类包含从Laravel的 Arr辅助函数中复制的函数。