butschster/entity-faker 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

butschster/entity-faker

最新稳定版本:v2.0.0

Composer 安装命令:

composer require butschster/entity-faker

包简介

Create fake entities based on your classes

README 文档

README

Support me on Patreon Latest Stable Version Build Status Total Downloads License

This package will help you generate fake entities and persist them to your ORM.

<?php

use Butschster\EntityFaker\LaminasEntityFactory;
use Laminas\Hydrator\ReflectionHydrator;
use Faker\Factory as Faker;

$factory = new \Butschster\EntityFaker\Factory(
    new LaminasEntityFactory(
        new ReflectionHydrator()
    ),
    Faker::create()
);

class User 
{
    private string $id;
    private string $username;
    private string $email;
    
    public function __construct(string $id, string $username, string $email) 
    {
        $this->id = $id;
        $this->username = $username;
        $this->email = $email;
    }
}

class SuperUser extends User
{
    private bool $isAdmin = false;
    
    public function __construct(string $id, string $username, string $email, bool $isAdmin) 
    {
        parent::__construct($id, $username, $email);
        $this->isAdmin = $isAdmin;
    }
}

$factory->define(User::class, function (Faker $faker, array $attributes) {
    return [
        'id' => $faker->uuid,
        'username' => $faker->username,
        'email' => $faker->email
    ];
});

$factory->define(SuperUser::class, function (Faker $faker, array $attributes) use($factory) {
    $userAttributes = $factory->raw(User::class);
    
    return $userAttributes + [
        'isAdmin' => $faker->boolean
    ];
});

Create and persist an entity

$user = $factory->of(User::class)->create();

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "tsteuber@hotmail.com";
//}

Create and persist multiply entities

$users = $factory->of(User::class)->times(10)->create();

//[
//    class User {
//      private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//      private string $username = "zetta86";
//      private string $email = "tsteuber@hotmail.com";
//    },
//    ...
//]

Create and persist an entity with predefined attributes

$user = $factory->of(User::class)->create([
    'email' => 'admin@site.com'
]);

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "admin@site.com";
//}

Create an entity

$user = $factory->of(User::class)->make();

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "tsteuber@hotmail.com";
//}

Create multiply entities

$users = $factory->of(User::class)->times(10)->make();

//[
//    class User {
//      private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//      private string $username = "zetta86";
//      private string $email = "tsteuber@hotmail.com";
//    },
//    ...
//]

Create an entity with predefined attributes

$user = $factory->of(User::class)->make([
    'email' => 'admin@site.com'
]);

//class User {
//  private string $id = "0b13e52d-b058-32fb-8507-10dec634a07c";
//  private string $username = "zetta86";
//  private string $email = "admin@site.com";
//}

Get raw attributes for entity

$attributes = $factory->of(SuperUser::class)->raw();

//[
//    'id' => "0b13e52d-b058-32fb-8507-10dec634a07c",
//    'username' => 'zetta86',
//    'email' => 'tsteuber@hotmail.com',
//]

Get raw attributes for entity with predefined values

$attributes = $factory->of(SuperUser::class)->raw([
    'email' => 'test@site.com'
]);

//[
//    'id' => "0b13e52d-b058-32fb-8507-10dec634a07c",
//    'username' => 'zetta86',
//    'email' => 'test@site.com',
//]

Generate array of all defined entities

$repository = $factory->make(1000);

$seeds = $repository->get(User::class)->random(100);

$seeds = $repository->get(SuperUser::class)->take(50);

Generate array of raw data for all defined entities

$repository = $factory->raw(1000);

$seeds = $repository->get(User::class)->random(100);

$seeds = $repository->get(SuperUser::class)->take(50);

Export array of raw data to a file for given entity to php file

$path = $factory->of(SuperUser::class)->times(1000)->export('path/to/store');
// path/to/store/SuperUser.php

Export array of raw data to a files for all defined entities

$repository = $factory->export('path/to/store', 1000);
$seeds = $repository->get(User::class)->random(100);

Custom entity builder

You can define your own EntityBuilder class with custom persist logic.

use Butschster\EntityFaker\EntityFactoryInterface;
use Faker\Factory as Faker;
use Cycle\ORM\ORMInterface;
use Cycle\ORM\TransactionInterface;

class CycleOrmEntityFactory implements EntityFactoryInterface 
{
    private array $afterCreation = [];
    private array $beforeCreation = [];

    protected ORMInterface $orm;
    protected Transaction $transaction;

    public function __construct(ORMInterface $orm)
    {
        $this->orm = $orm;

        $this->beforeCreation(function () {
            $this->transaction = new Transaction($this->orm);
        });

        $this->afterCreation(function () {
            $this->transaction->run();
        });
    }

    public function store(object $entity): void
    {
        $this->transaction->persist($entity);
    }

    public function hydrate(object $entity, array $data): object
    {
        return $this->orm->getMapper($entity)->hydrate($entity, $data);
    }

    /**
     * Add a callback to run after creating an entity or array of entities.
     * @param callable $callback
     */
    public function afterCreation(callable $callback): void
    {
        $this->afterCreation[] = $callback;
    }

    public function afterCreationCallbacks(): array
    {
        return $this->afterCreation;
    }

    /**
     * Add a callback to run before creating an entity or array of entities.
     * @param callable $callback
     */
    public function beforeCreation(callable $callback): void
    {
        $this->beforeCreation[] = $callback;
    }

    public function beforeCreationCallbacks(): array
    {
        return $this->beforeCreation;
    }
}

$factory = new \Butschster\EntityFaker\Factory(
    new CycleOrmEntityFactory(...),
    Faker::create()
);

统计信息

  • 总下载量: 33.52k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 4
  • 点击次数: 1
  • 依赖项目数: 3
  • 推荐数: 0

GitHub 信息

  • Stars: 4
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-07-15