apie / faker
Composer package of the apie library: faker
Installs: 6 662
Dependents: 2
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- php: >=8.3
- apie/core: dev-main
- fakerphp/faker: ^1.23.1
- guzzlehttp/psr7: ^2.4
- maennchen/zipstream-php: ^3.0
- niklongstone/regex-reverse: ^0.4.0|^0.5.0
- symfony/console: ^7.2
Requires (Dev)
- apie/common-value-objects: dev-main
- apie/date-value-objects: dev-main
- apie/fixtures: dev-main
- apie/service-provider-generator: 0.11.3
- apie/text-value-objects: dev-main
- illuminate/support: *
- phpspec/prophecy-phpunit: ^2.2
- phpunit/phpunit: ^11.5.2
- symfony/finder: ^7.2
This package is auto-updated.
Last update: 2025-03-18 22:52:27 UTC
README
faker
This package is part of the Apie library. The code is maintained in a monorepo, so PR's need to be sent to the monorepo
Documentation
This package adds a method to the library Faker to fake domain object and value object contents.
Because of the recursive nature this is the easiest setup:
<?php use Apie\Faker\ApieObjectFaker; use Faker\Factory; $faker = Factory::create(); $faker->addProvider(ApieObjectFaker::createWithDefaultFakers($faker)); // returns a random Gender enum value. $faker->fakeClass(Gender::class); class User implements EntityInterface { // ... public function __construct(private Gender $gender, private FirstName $firstName, private LastName $lastName) { } } // creates a User with random constructor arguments. $faker->fakeClass(User::class);
String value objects with regular expressions.
String value objects that have the trait IsStringWithRegexValueObject and implement HasRegexValueObjectInterface will be faked easily by using the regular expression to make a valid value object.
Adding custom support
You can create a class implementing ApieClassFaker to make your own fake methods. You can reuse the methods available in Faker itself.
<?php use Apie\Faker\Interfaces\ApieClassFaker; use Faker\Generator; use ReflectionClass; class SpecificClassFaker implements ApieClassFaker { public function supports(ReflectionClass $class): bool { return $class->name === SpecificValueObject::class; } public function fakeFor(Generator $generator, ReflectionClass $class): SpecificValueObject { return new SpecificValueObject($generator->randomElement([1, 2, 3])); } }
Adding a createRandom method in the object itself.
Instead of making many ApieClassFaker methods you can make a method on the value object that will result in a random value object.
<?php use Apie\Core\Attributes\FakeMethod; use Apie\Core\ValueObjects\Interfaces\ValueObjectInterface; #[FakeMethod("createRandom")] class SpecificClass implements ValueObjectInterface { public static function createRandom(): self { return new self(rand(1, 3)); } }
You can also provide arguments to this method or the Faker generator itself:
<?php use Apie\Core\Attributes\FakeMethod; use Apie\Core\ValueObjects\Interfaces\ValueObjectInterface; use Faker\Generator; #[FakeMethod("createRandom")] class SpecificClass implements ValueObjectInterface { public static function createRandom(Generator $generator, int $maximum): self { return new self($generator->numberBetween(1, $maximum)); } }
In this case calling $faker->fakeClass(SpecificClass::class); will run SpecificClass::createRandom() with the faker and a random integer.