anteris-dev / data-transfer-object-factory
为模拟数据传输对象提供易于使用的API。
Requires
- php: ^8.0
- anteris-dev/faker-map: ^2.0
- fakerphp/faker: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- phpunit/phpunit: ^9.0
- spatie/data-transfer-object: ^3.0
- vimeo/psalm: ^4.0
This package is auto-updated.
Last update: 2024-09-11 01:11:05 UTC
README
此包提供了一个用于数据传输对象的流畅工厂。原生支持POPOs(普通的PHP对象)、getter / setter对象,以及Spatie的数据传输对象。如果存在未表示的DTO,您可以轻松添加适配器以支持它。
此包强大的一个特点是它集成了Faker,旨在根据其名称智能地生成数据的内容。例如,具有属性"$firstName"的DTO将获取一个Faker名字。
默认情况下,仅支持内置PHP类型,但此工厂可以轻松扩展以支持其他类型(例如Carbon)。
安装
运行 composer require anteris-dev/data-transfer-object-factory
。
入门
如果您只是在使用DTO中使用PHP默认类型,您可以直接开始。只需将您的DTO FQDN传递给静态new()
方法。然后,您可以使用以下任何辅助方法。
count()
- 允许您指定要生成的DTO数量。它们将作为数组返回。make()
- 当您准备好生成DTO时调用。返回生成的DTO[s]。random()
- 生成随机数量的DTO。sequence()
- 交替特定状态。(见下文)state()
- 根据传递的值数组手动设置属性。
以下是一些这些方法的示例。
use Anteris\DataTransferObjectFactory\Factory; // Creates one DTO Factory::new(PersonData::class)->make(); // Creates two DTOs in an array Factory::new(PersonData::class)->count(2)->make(); // Sets the first name of every person to "Jim" Factory::new(PersonData::class) ->random() ->state([ 'firstName' => 'Jim', ]) ->make(); // Also sets the first name of every person to "Jim" Factory::dto(PersonData::class) ->random() ->make([ 'firstName' => 'Jim', ]); // Alternates the names of each person between "Jim" and "Susie" Factory::dto(PersonData::class) ->random() ->sequence( [ 'firstName' => 'Jim' ], [ 'firstName' => 'Susie' ] ) ->make();
扩展
适配器
适配器指导工厂如何检索特定类型类的属性。适配器必须实现Anteris\DataTransferObjectFactory\Adapter\AdapterInterface
,它需要以下方法。
handles(ReflectionClass $class)
- 返回一个布尔值,表示适配器是否可以处理引用的反射类。getProperties(ReflectionClass $class)
- 返回在引用的反射类上找到的属性集合。createClass(ReflectionClass $class, PropertyCollection $collection)
- 使用传递的属性创建并返回反射类的实例。
要在工厂上注册适配器,请调用其静态registerAdapter()
方法。例如
use Anteris\DataTransferObjectFactory\Factory; Factory::registerAdapter(new MyCustomAdapter);
有关更多信息,请参阅源代码中的Adapter
目录。
属性类型
过去,您必须扩展工厂类才能利用自定义类型。现在,您可以通过在PropertyFactory
类上使用静态registerProvider()
方法来完成此操作。此方法接受两个参数。第一个应该是您提供的类的FQDN(例如Carbon\Carbon
)或内置类型(例如string
)。第二个应该是一个回调,该回调返回生成的值。当调用时,此回调会传递两个属性以帮助生成值。第一个是Anteris\FakerMap\FakerMap
的实例,可用于帮助生成假数据。第二个是正在生成的属性的名称或null(如果没有提供)。
例如,要支持Carbon
use Anteris\DataTransferObjectFactory\PropertyFactory; use Anteris\FakerMap\FakerMap; PropertyFactory::registerProvider('Carbon\Carbon', fn(FakerMap $fakerMap) => Carbon::parse( $fakerMap->closest('dateTime')->fake() ));