laravel-shift/faker-registry
Central registry for Laravel Faker providers. Easily register, discover, and reuse custom providers across apps and packages, keeping factories and seeders consistent. Ideal for sharing domain-specific fake data generators and avoiding duplicate setup.
composer require laravel-shift/faker-registry
config/app.php if needed).app/Faker/Provider/MyCustomProvider.php):
namespace App\Faker\Provider;
use Faker\Generator;
class MyCustomProvider {
public static function provide(Generator $faker) {
return [
'userAgent' => $faker->randomElement(['Chrome', 'Firefox', 'Safari']),
'statusCode' => $faker->randomElement([200, 404, 500]),
];
}
}
AppServiceProvider@boot:
use Faker\Registry;
public function boot()
{
Registry::addProvider(\App\Faker\Provider\MyCustomProvider::class);
}
$userAgent = Registry::faker()->userAgent;
address, currency, timeline) once, avoiding per-factory duplication.Registry::faker() instance across tests to ensure deterministic outputs (e.g., Registry::faker()->countryCode always uses your defined region logic).::invoiceNumber(), ::productSku()) into providers for clean factory definitions:
// Factory
'sku' => Registry::faker()->productSku,
addProvider() to layer custom + core providers.Registry is a static facade over Faker—do not inject it into other services; resolve via Registry::faker() only where needed.Registry::faker() returns the same Generator instance after first access. For test isolation (e.g., seed control), manually reseed:
Registry::faker()->seed(1234);
::billingAddress() vs ::shippingAddress()).Registry::faker() via tap(Registry::faker(), fn($f) => $f->seed($seed)) to ensure reproducible test data.Generator and bind your own instance to Laravel’s container, then override Registry::setFaker() to integrate with DI.How can I help you explore Laravel packages today?