Laravel(たとえば、ランダムな建物名用のプロバイダー)でFakerのカスタムプロバイダーを作成したいと思います。
カスタムプロバイダーをアプリケーションのどこに保存し、どのように使用しますか?
カスタムプロバイダーを生成するには、php artisan
を使用する必要があります...
コマンドラインで、アプリのルートに移動して「...」と入力します。
php artisan make:provider FakerServiceProvider
これにより、app/Providers
フォルダーに新しいプロバイダーが生成されます。これが私の登録関数が偽物のドキュメントの例から外れるように見えるものです。
/**
* 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 <7の場合は、新しいプロバイダークラスを使用して新しいファイルを作成し、それを渡す必要があります。この新しいプロバイダーも、app/config.php
のproviders
配列に追加してください。
登録されたので、次を使用して新しい偽造クラスを取得できます...
$faker = app('Faker');
echo $faker->title;
さらに、 https://laravel.com/docs/5.2/facades のドキュメントに目を通すと、Faker
ファサードを非常に簡単に作成できるはずです。面倒な作業はすべて完了しました。新しいファサードクラスを作成し、getFacadeAccessor
が'Faker'
を返し、それをapp/config.php
のfacades
配列に追加するだけです。
その後、あなたはそれをそのように簡単に使うことができます...
echo Faker::title;
カスタムプロバイダークラスを作成し、app/Faker /CustomProvider.phpに保存します。コード:
namespace App\Faker;
use Faker\Provider\Base;
class CustomProvider extends Base
{
public function customName()
{
return $this->generator->sentence(Rand(2, 6));
}
}
次に、addProviderメソッドを使用してカスタムプロバイダーをフェイカーに追加する必要があります。カスタムプロバイダーを追加したlaravelのファクトリの例:
<?php
use Faker\Generator as Faker;
$factory->define(App\Models\Model::class, function(Faker $faker) {
$faker->addProvider(new App\Faker\CustomProvider($faker));
return [
'name' => $faker->customName,
];
});
_$faker
_インスタンスをresolve()
でインスタンス化する必要がなかったため、これがより適切に機能することがわかりました。
_public function register ()
{
$this->app->bind( Generator::class, function ( $app ) {
$faker = \Faker\Factory::create();
$faker->addProvider( new CustomFakerProvider( $faker ) );
return $faker;
} );
}
_