2016-07-07 14 views
7

LaravelのFaker用のカスタムプロバイダを作成したいとします(たとえば、ランダムな建物名用)。Laravelで独自のFakerプロバイダを実装する方法

アプリケーションにカスタムプロバイダを保存するにはどうすればいいですか?新しいプロバイダを生成する必要があります

答えて

9

あなたのアプリと種類のルートに移動、コマンドラインで...カスタムプロバイダを生成する

php artisanを使用する必要があります...

php artisan make:provider FakerServiceProvider 

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; 
    }); 
} 

ここでは匿名クラスを使用しています。 PHP <をお持ちの場合は、新しいプロバイダクラスを使用して新しいファイルを作成し、それを渡す必要があります。providers配列にこの新しいプロバイダを追加してください。app/config.php

今それが登録されますことを、あなたは以下を使用して、新しい偽物のクラスをつかむことができます...さらに

$faker = app('Faker'); 
echo $faker->title; 

、あなたがhttps://laravel.com/docs/5.2/facadesでドキュメントを通過する場合にも、非常にFakerファサードを作ることができるはずです簡単に。すべての重い持ち上げが完了したら、新しいファサードクラスを作成して​​に返す'Faker'を追加し、facadesの配列にapp/config.phpというように追加するだけです。

その後、あなたは単に私が `$出荷時>(APP \ユーザーを定義::クラス、関数(偽物\ジェネレータ$の偽物){...`持っていたので...

echo Faker::title; 
+0

のようにそれを使用することができます工場ではバインディングの名前を 'Faker \ Generator'に変更しました –

+0

@ x-yuriあなたのしたことをより正確にすることができますか?私のプロジェクトには同様の要件があります –

+0

@ rap-2-h私はおそらく、答えのコードが 'Faker'クラス(' $ this-> app-> singleton( 'Faker' ... '))にバインドされていることを意味していますが、' 'Faker \ Generator''が' 'データベース/ factories'には、おそらく 'Faker \ Generator'に余分なフォーマッタ(この場合は' title')を使うように頼っていたでしょう –

関連する問題