Yii2 faker 组件使用

icy2003 程序 2020-03-19 06:10:20 1308 0条

生成测试时需要的大量假数据!

faker.jpg

安装和配置

如果你使用 Yii2 高级模板,那么 yiisoft/yii2-faker 是默认存在的,但它不会被默认加到组件里,以高级模板为例子,在 console/config/main.php 里加入如下配置:

'controllerMap' => [
    'fixture' => [
        'class' => 'yii\faker\FixtureController',
    ],
],

并在 console/config/bootstrap.php 里定义 tests 目录:

Yii::setAlias('@tests', dirname(__DIR__) . '/tests');

创建模板

在 tests 目录下创建模板文件 unit/templates/fixtures/users.php

<?php

/**
 * @var $faker \Faker\Generator
 * @var $index integer
 */
return [
    'username' => $faker->name,
    'password_hash' => Yii::$app->getSecurity()->generatePasswordHash("123456{$index}"),
    'created_at' => $faker->unixTime(),
];

其中 $index 是从 0 开始的数组索引,$faker 是 Faker 对象,可用的属性和函数可以在目录 vendor/fzaninotto/faker/src/Faker/Provider 里找到,有空的话我可以写一篇介绍。

生成假数据

在项目根目录(yii 脚本存在的位置)打开命令窗口,执行如下命令:

php yii fixture/generate users --count=2

生成的假数据会被放在 tests/unit/fixtures/data/users.php 里:

<?php

return [
    'users0' => [
        'username' => 'Emerson Wiza MD',
        'password_hash' => '$2y$13$8XCqeNKQYnF5DfCakluWr.wnGZW6AY6nSQmmrIiZSU1Kl85U6F.HS',
        'created_at' => 393316190,
    ],
    'users1' => [
        'username' => 'Dr. Ismael Boehm Sr.',
        'password_hash' => '$2y$13$DMGJbzswZemnAWpRWpFPAOz66DKjb69pSEAXB2stocaoxYi78MP/i',
        'created_at' => 1335650465,
    ],
];

可以注意到,这里的用户名是英文的,后面会说生成中文的方法。

使用假数据

可以使用如下代码将数据插入数据库:

$data = require Yii::getAlias('@console/tests/unit/fixtures/data/users.php');
Yii::$app->db->createCommand()->batchInsert('{{%users}}', ['username', 'password_hash', 'created_at'], $data)->execute();

常用指令说明

  • --language=zh_CN 可以生成中文的假数据
  • --templatePath 可以指定模板路径

例如:

php yii fixture/generate users --count=2 --templatePath=@tests/unit/templates/fixtures --language=zh_CN

更多说明可以参考 Yii 中文网的文档

标签: php, yii2

非特殊说明,本博所有文章均为博主原创。