当前位置:  开发笔记 > 编程语言 > 正文

在Laravel 5.2中更改Faker Locale

如何解决《在Laravel5.2中更改FakerLocale》经验,为你挑选了4个好方法。

有没有办法在数据库/ factories/ModelFactory.php文件中指定Faker区域设置?这是我这样做的非功能性尝试>,<

$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> Vincent Mimo..:

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

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

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


我想当你想要整个应用程序的_single_语言环境时,这是有效的...当你想支持多语言测试时,这是不行的
对于Laravel> = 5.2,这是最好的答案.

2> David Barker..:

这个答案仅适用于LARAVEL <= 5.1,请参阅此答案,了解Laravel> = 5.2中的解决方案.

要在Faker中使用区域设置,生成器需要使用区域设置进行创建.

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

从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,  
    ];
});



3> ivanaugustob..:

晚会,但经过一些研究,我在faker文档中发现了这一点:

[...]因为Faker从最后一个提供程序开始,您可以轻松地覆盖现有的格式化程序:只需添加一个包含以您要覆盖的格式化程序命名的方法的提供程序.

这意味着您可以轻松地将自己的提供程序添加到Faker\Generator实例中.

所以你可以做这样的事情

$faker->addProvider(new Faker\Provider\pt_BR\Person($faker));

就在之前return []然后使用特定的提供者,比如(在这种情况下)$faker->cpf;

在Laravel 5.3上测试过

有关Faker文档的更多信息



4> Juliano Petr..:

我更喜欢使用它:

$fakerBR = Faker\Factory::create('pt_BR');

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

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

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有