feffel / felfactory

v0.1.0 2019-07-20 12:38 UTC

This package is auto-updated.

Last update: 2024-09-21 00:03:42 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

felfactory是一个库,可以为您生成充满虚假数据的对象。无论您需要随机化测试数据、启动数据库、填充持久化数据以进行压力测试,还是匿名化从生产服务中获取的数据。

Faker的数据生成器提供支持。

目录

安装

通过composer

composer require feffel/felfactory

基本用法

将类名传递给您的工厂实例,它将创建并填充适当的类型数据。

class Person
{
    private $firstName;

    private $lastName;

    private $address;
}

$factory = new \felfactory\Factory();
$person  = $factory->generate(Person::class);
var_dump($person); 

//  class Person#2407 (3) {
//    private $firstName => string(6) "Breana"
//    private $lastName  => string(7) "Okuneva"
//    private $address   => string(43) "37382 Chanel Point Steuberchester, AR 83395"
//  }

配置

配置使用环境变量,将这些添加到您的环境或添加一个.env文件到您的根项目目录。

模型定义

您可以为模型提供定义以自定义模型的生成,定义不需要包含所有属性,工厂仍然会猜测缺失的属性。

  • Generate接受一个Faker生成器属性[例如:firstName,lastName,phoneNumber,...]
  • Value接受任何PHP值并将其传递给属性[例如:"string value",15,null,...]
  • ObjectOf接受一个FQCN并生成此类型的对象[例如:namespace\models\Person,Person::class,...]
  • ManyOf接受任何之前的定义作为它的第一个参数,并生成一个数组,这个数组由它提供的第二个和第三个参数提供的包含范围所限制。

注释定义

use felfactory\Annotation as FCT;

class AnnotatedModel
{
    /**
     * @FCT\Generate("firstName")
     */
    public $firstName;

    /**
     * @FCT\Value("""felfel""")
     */
    protected $lastName;

    /**
     * @FCT\ObjectOf(AddressModel::class)
     */
    public $address;

    /**
     * @FCT\ManyOf(@FCT\Generate("phoneNumber"), 1, 3)
     */
    public $phoneNos;
}

PHP定义

return [
    AnnotatedModel::class => [
        'firstName' => "generate('firstName')",
        'lastName'  => "value('\"felfel\"')",
        'address'   => "class(felfactory\models\AddressModel)",
        'phoneNos'  => "many(generate('phoneNumber'), 1, 3)"
    ],
];

工作原理

工厂不使用类的原始构造函数,也不提供任何设置器。所有的初始化过程都由反射处理。

工厂查找属性上的@var注释以确定其类型,如果找到属性的定义,将使用该定义,否则将根据属性的类型和名称猜测。

对象

如果找到属性是对象,将触发另一个工厂调用以生成它,名称将被忽略。接口和抽象类型将不会自动生成,并将设置为null。

标量类型和非注释属性

标量类型将根据属性名称首先猜测,如果不匹配任何支持的数据生成器,则根据类型生成。

贡献

请参阅CONTRIBUTINGCODE_OF_CONDUCT以获取详细信息。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。