使用 `
Faker\Factory::create()`
创建并初始化一个假数据生成器,然后就可用通过该对象不同的属性来生产不同类型的假数据。
// 使用工厂模式生成 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
为模板的项目里,别名应该加在 console.php
配置文件中:
Yii::setAlias('tests', __DIR__ . '/../tests');
在使用这个命令前,你需要对 Faker 库有所了解(阅读手册),比如怎么通过给定的格式生成fixture模板文件。
// users.php 在模板目录里 (默认在 @tests/unit/templates/fixtures)
/**
* @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), // generate a sentence with 7 words
];
正如你看到的,模板文件只是普通的PHP脚本,模板脚本应该返回包含一组键值对的数组,键代表表中的字段名,值代表假数据值。
当你运行 fixture/generate
命令,每一条假数据都会执行一次模板中定义的假数据生成格式。在模板中你有两个预定义变量可以使用。
$faker
: 假数据生成器实例$index
: 当前假数据的索引。比如你要为user表生成3个假数据,索引将是 0,1,2。有了模板文件,就可以通过下面的命令生成假数据了:
# 通过users的假数据模板生成假数据
php yii fixture/generate users
# 通过假数据模板同时生成多张表的假数据
php yii fixture/generate users profiles teams
在上面的代码中 users
是假数据模板的模板名称。运行上面的命令后,假数据会在假数据目录中生成 (默认在 @tests/unit/fixtures
文件夹)。
php yii fixture/generate-all
上面这个命令将会扫描模板目录下存放的所有模板并生成假数据,通过 --count
参数指定你想要生成多少行假数据。下面的命令将会使用所有的假数据
模板,每一个模板生成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 配置文件中的 $providers
属性里加上你自己的数据生成策略提供器:
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'providers' => [
'app\tests\unit\faker\providers\Book',
],
],
]