本地化Faker \ Factory不适用于laravel

时间:2017-05-15 05:18:46

标签: php laravel laravel-5.4

我有一个包含以下字段的帖子模型:

post_id
post_title
post_content
post_content_full
author

现在我想使用laravel sedders和模型工厂来创建假的fa_IR本地化数据并插入posts表。

为此我在database/factories/ModelFactory.php中写了这个:

$factory->define(App\Post::class, function (Faker\Generator $faker) {
        return [
            'post_title'        => $faker->sentence,
            'post_content'      => $faker->paragraph,
            'post_content_full' => $faker->paragraph(3),
            'author'            => $faker->name
        ];
    });

然后我创建了一个PostsTableSeeder类,如下所示:

use Illuminate\Database\Seeder;

class PostsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run ()
    {
        factory(App\Post::class, 5)->create();
    }
}

并在AppServiceProvider.php下面添加了代码register功能:

$this->app->singleton(FakerGenerator::class, function () {
        return FakerFactory::create('fa_IR');
    });

但是在运行种子之后,laravel使用默认语言环境(en_US)并忽略fa_IR

我不知道还能做什么。

更新:

即使我在DEFAULT_LOCALE const vendor/fzaninotto/faker/src/Faker/Factory.php更改为fa_IR也没有任何变化。

3 个答案:

答案 0 :(得分:2)

试试这种方式

$factory->define(App\Post::class, function () {
    $faker = Faker\Factory::create('fa_IR');

    return [
        'post_title'        => $faker->sentence,
        'post_content'      => $faker->paragraph,
        'post_content_full' => $faker->paragraph(3),
        'author'            => $faker->name
    ];
});

答案 1 :(得分:1)

并非所有faker方法都支持所有语言,从文档的快速查询中可以看出,Company本地化支持Addressfa_IR提供商

答案 2 :(得分:0)

您需要在应用配置文件中更改伪造的语言环境。