在 Laravel 5.2 中更改 Faker Locale

2022-08-30 10:48:56

有没有办法在数据库/工厂/模型工厂文件中指定 Faker .php 区域设置?这是我>,<

$factory->define(App\Flyer::class, function (Faker\Generator $faker) {

    // What is the correct way of doing this?
    $faker->locale('en_GB'); 

    return [
        'zip' => $faker->postcode,
        'state' => $faker->state,  
    ];
});

感谢您的阅读!


答案 1

可以在配置文件中配置 Faker 区域设置。只需添加密钥。config/app.phpfaker_locale

例如:'faker_locale' => 'fr_FR',

另请参阅我的PR以记录以前未记录的功能:https://github.com/laravel/laravel/pull/4161


答案 2

此答案仅适用于 LARAVEL <=5.1,或者当您想要使用许多不同的区域设置时,请参阅此答案,了解 Laravel >=5.2 中的解决方案

要将区域设置与 Faker 一起使用,生成器需要使用该区域设置进行创建。

$faker = Faker\Factory::create('fr_FR'); // create a French faker

从伪造者文档:

如果未找到本地化的提供程序,则工厂回退到默认区域设置 (en_EN)。

默认情况下,Laravel 在 中绑定了 faker 实例的创建。用于绑定的确切代码是:EloquentServiceProvider

// FakerFactory is aliased to Faker\Factory
$this->app->singleton(FakerGenerator::class, function () {
    return FakerFactory::create();
});

看起来Laravel没有办法修改它传递到工厂关闭的faker实例的区域设置,因为它不会向Faker传递任何参数。

因此,通过在工厂方法中使用自己的Faker实例,您将得到更好的服务。

$localisedFaker = Faker\Factory::create("fr_FR");

$factory->define(App\Flyer::class, function (Faker\Generator $faker) {

    // Now use the localisedFaker instead of the Faker\Generator
    // passed in to the closure.
    return [
        'zip' => $localisedFaker->postcode,
        'state' => $localisedFaker->state,  
    ];
});

推荐