如何在Laravel中实现自己的Faker提供程序

car*_*rte 11 php faker laravel laravel-seeding

我想在Laravel中为Faker创建一个自定义提供程序(例如,一个用于随机构建名称).

我在哪里将自定义提供程序存储在我的应用程序中以及如何使用它?

use*_*496 15

您应该使用php artisan生成自定义提供程序...

在命令行上,导航到应用程序的根目录并键入...

php artisan make:provider FakerServiceProvider
Run Code Online (Sandbox Code Playgroud)

这应该在app/Providers文件夹中生成一个新的提供者.这是我的注册函数看起来像faker文档中的示例.

/**
 * Register the application services.
 *
 * @return void
 */
public function register()
{
    $this->app->singleton('Faker', function($app) {
        $faker = \Faker\Factory::create();
        $newClass = new class($faker) extends \Faker\Provider\Base {
            public function title($nbWords = 5)
            {
                $sentence = $this->generator->sentence($nbWords);
                return substr($sentence, 0, strlen($sentence) - 1);
            }
        };

        $faker->addProvider($newClass);
        return $faker;
    });
}
Run Code Online (Sandbox Code Playgroud)

我在这里使用匿名课程.如果你有php <7,你可能需要用你的新提供者类创建一个新文件并将其传入.确保你也将这个新的提供者添加到你的providers数组中app/config.php.

现在它已经注册,您可以使用以下内容获取新的faker类...

$faker = app('Faker');
echo $faker->title;
Run Code Online (Sandbox Code Playgroud)

此外,如果您浏览https://laravel.com/docs/5.2/facades上的文档,您还应该能够Faker轻松地制作外观.所有繁重的工作都完成了,您只需要创建新的外观类,getFacadeAccessor返回'Faker'并将其添加到您的facades数组中app/config.php.

然后你可以简单地使用它......

echo Faker::title;
Run Code Online (Sandbox Code Playgroud)


小智 7

我发现这更有效,因为它不需要我的$faker实例实例化resolve()

public function register ()
    {
        $this->app->bind( Generator::class, function ( $app ) {

            $faker = \Faker\Factory::create();
            $faker->addProvider( new CustomFakerProvider( $faker ) );

            return $faker;
        } );

    }
Run Code Online (Sandbox Code Playgroud)


小智 6

创建您的自定义提供程序类,并将其保存在app / Faker / CustomProvider.php下。码:

namespace App\Faker;

use Faker\Provider\Base;

class CustomProvider extends Base
{
    public function customName()
    {
        return $this->generator->sentence(rand(2, 6));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您只需要通过addProvider方法将自定义提供程序添加到faker即可。laravel工厂添加自定义提供程序的示例:

<?php
use Faker\Generator as Faker;

$factory->define(App\Models\Model::class, function(Faker $faker) {
    $faker->addProvider(new App\Faker\CustomProvider($faker));

    return [
         'name' => $faker->customName,
    ];
});
Run Code Online (Sandbox Code Playgroud)