I want to create a custom provider for Faker in Laravel (e.g. one for a random building name).
Where do I store the custom provider in my application and how do I use it?
Advertisement
Answer
You should use php artisan
to generate the custom provider…
On the command line, navigate to the root of your app and type…
php artisan make:provider FakerServiceProvider
That should generate a new provider in the app/Providers
folder. Here is what my register function looks like going off the example in the faker docs.
/** * Register the application services. * * @return void */ public function register() { $this->app->singleton('Faker', function($app) { $faker = FakerFactory::create(); $newClass = new class($faker) extends FakerProviderBase { public function title($nbWords = 5) { $sentence = $this->generator->sentence($nbWords); return substr($sentence, 0, strlen($sentence) - 1); } }; $faker->addProvider($newClass); return $faker; }); }
I’m using an anonymous class here. If you have php < 7, you would likely need to create a new file with your new provider class and pass that in. Make sure you also add this new provider to your providers
array in config/app.php
.
Now that it’s registered, you can grab your new faker class using the following…
$faker = app('Faker'); echo $faker->title;
Additionally, if you go through the docs at https://laravel.com/docs/5.2/facades you should also be able to make a Faker
facade quite easily. All the heavy lifting is done, you’d just have to create the new facade class, have getFacadeAccessor
return 'Faker'
, and add it to your facades
array in app/config.php
.
Then you can simply use it like so…
echo Faker::title;