Faker\Factory::create()
を使って、faker ジェネレータを作成して初期化します。この faker ジェネレータのプロパティの中から、あなたが必要とするデータのタイプを指定する名前のものを選んでアクセスすると、疑似データを生成することが出来ます。
// factory を使って Faker\Generator のインスタンスを作成する
$faker = Faker\Factory::create();
// プロパティにアクセスして、データを生成する
echo $faker->name;
// 'Lucy Cechtelar';
echo $faker->address;
// "426 Jordy Lodge
// Cartwrightshire, SC 88120-6700"
echo $faker->text;
// Sint velit eveniet. Rerum atque repellat voluptatem quia rerum. Numquam excepturi
// beatae sint laudantium consequatur. Magni occaecati itaque sint et sit tempore. Nesciunt
// amet quidem. Iusto deleniti cum autem ad quia aperiam.
// A consectetur quos aliquam. In iste aliquid et aut similique suscipit. Consequatur qui
// quaerat iste minus hic expedita. Consequuntur error magni et laboriosam. Aut aspernatur
// voluptatem sit aliquam. Dolores voluptatum est.
// Aut molestias et maxime. Fugit autem facilis quos vero. Eius quibusdam possimus est.
// Ea quaerat et quisquam. Deleniti sunt quam. Adipisci consequatur id in occaecati.
// Et sint et. Ut ducimus quod nemo ab voluptatum.
tests
というエイリアスをコンソールの構成情報で定義してください。
例えば、basic
プロジェクト・テンプレートであれば、Yii::setAlias('tests', dirname(__DIR__) . '/tests/codeception');
を console.php
構成情報ファイルに追加します。
このコマンドを使い始めるためには、Faker ライブラリに慣れ親しんで (ガイドを読んでください)、
指定された形式に従ってフィクスチャ・テンプレート・ファイルを生成しなければなりません。
// テンプレート・パス (デフォルトでは、@tests/unit/templates/fixtures の下) の users.php ファイル
/**
* @var $faker \Faker\Generator
* @var $index integer
*/
return [
'name' => $faker->firstName,
'phone' => $faker->phoneNumber,
'city' => $faker->city,
'password' => Yii::$app->getSecurity()->generatePasswordHash('password_' . $index),
'auth_key' => Yii::$app->getSecurity()->generateRandomString(),
'intro' => $faker->sentence(7, true), // 単語 7 個の文を生成
];
御覧のように、テンプレート・ファイルは単純な通常の PHP スクリプトです。
スクリプトは「キー・値」ペアの配列を返さなければなりません。ここで、キーはテーブルのカラム名を表し、値は対応する値です。
fixture/generate
コマンドを実行すると、生成されるデータ行のすべてについてこのスクリプトが実行されます。
スクリプトの中では、次の二つの事前定義された変数を使用することが出来ます。
$faker
: Faker ジェネレータのインスタンス。$index
: 現在のフィクスチャのインデックス。例えば、user テーブルのために三つのフィクスチャを生成する必要がある場合、インデックスは 0..2 です。このようなテンプレート・ファイルを使って、次のようなコマンドでフィクスチャを生成することが出来ます。
# user のフィクスチャ・テンプレートからフィクスチャを生成する
php yii fixture/generate users
# いくつかのフィクスチャ・データ・ファイルを生成する
php yii fixture/generate users profiles teams
上記のコードで users
がテンプレートの名前です。
このコマンドを実行した後、テンプレートと同じ名前のファイルがフィクスチャ・パス (@tests/unit/fixtures
フォルダ) に生成されます。
php yii fixture/generate-all
上記のコマンドは、テンプレート・パスに保存されている全てのテンプレートに対してフィクスチャを生成して、
テンプレートの名前と同じファイル名でフィクスチャ・パスに保存します。
--count
オプションによって、テンプレートごとに生成したいフィクスチャの数を指定することが出来ます。
下記のコードでは、全てのテンプレートに対してフィクスチャを生成し、各フィクスチャ・ファイルについては 3 行 (3 個) のフィクスチャを得ることになります。
php yii fixture/generate-all --count=3
さらに、このコマンドには、さまざまなオプションがあります。
# ロシア語でフィクスチャを生成する
php yii fixture/generate users --count=5 --language="ru_RU"
# 他のパスからテンプレートを読む
php yii fixture/generate-all --templatePath='@app/path/to/my/custom/templates'
# 他のディレクトリにフィクスチャを生成する
php yii fixture/generate-all --fixtureDataPath='@tests/acceptance/fixtures/data'
次のコマンドを実行すると、利用可能な全てのテンプレートを見ることが出来ます。
# デフォルトのテンプレート・パス (すなわち、'@tests/unit/templates/fixtures') の下にある全てのテンプレートをリストする
php yii fixture/templates
# 指定したテンプレート・パスの下にある全てのテンプレートをリストする
php yii fixture/templates --templatePath='@app/path/to/my/custom/templates'
カスタム・テーブル・フィールドのためにあなた自身のデータ・プロバイダを作成することも出来ます。 詳細な情報は Faker ライブラリのガイドを参照してください。例えば、次のようにして、カスタム・プロバイダを作成します。
class Book extends \Faker\Provider\Base
{
public function title($nbWords = 5)
{
$sentence = $this->generator->sentence($nbWords);
return mb_substr($sentence, 0, mb_strlen($sentence) - 1);
}
}
そして、これを console.php 構成情報ファイルで現在のコマンドの $provider
プロパティに追加することによって、使用することが出来るようになります。
return [
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'providers' => [
'app\tests\unit\faker\providers\Book',
],
],
// ...
],
// ...
];
Yii 2 アドバンスト・テンプレートで faker を実行したい場合は、templatePath
および fixtureDataPath
を設定する必要があります。例えば、共通のフィクスチャを設定したい場合は、console/config/main.php
で以下のように構成します。
return [
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'templatePath' => '@common/tests/templates/fixtures',
'fixtureDataPath' => '@common/tests/fixtures/data',
],
// ...
],
// ...
];