LoginSignup
13
13

More than 5 years have passed since last update.

Laravelでfakerのlocaleを常時日本固定にする方法

Last updated at Posted at 2017-05-12

fakerを使うときに毎回localeを指定するのが面倒だったので。

2017/05/29 追記

もっと簡単な方法ありました。
fakertのデフォルトのlocaleはconfigで管理できるようです。
fakerでgrepをかけていたときにたまたま見つけたのですが・・・

DatabaseServiceProvider
    /**
     * Register the Eloquent factory instance in the container.
     *
     * @return void
     */
    protected function registerEloquentFactory()
    {
        $this->app->singleton(FakerGenerator::class, function ($app) {
            return FakerFactory::create($app['config']->get('app.faker_locale', 'en_US'));
        });

        $this->app->singleton(EloquentFactory::class, function ($app) {
            return EloquentFactory::construct(
                $app->make(FakerGenerator::class), $this->app->databasePath('factories')
            );
        });
    }

こんな感じでスッキリかけます

config/app.php
    // fakerで使用するlocale
    'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
APP_FAKER_LOCALE=ja_JP

動作確認

いいかんじ!!

$ php artisan tinker
app(\Faker\Generator::class)->name;
=> "浜田 香織"

ServiceProviderでサービスコンテナへ登録する

このやり方でも出来なくは無いですが無駄が多いです。
こちらを参照してください

DevEnviromentServiceProvider.php
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register() {
        if (in_array(config('app.env'), [
                'local',
                'dev',
                'testing'
        ])) {
            // fakerのlocaleを日本語に固定する
            $this->app->singleton(\Faker\Generator::class, function () {
                return \Faker\Factory::create('ja_JP');
            });
        }
    }
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13