Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Yii2 Faker Laravel Package

yiisoft/yii2-faker

Yii2 integration for Faker, providing fixtures and fake data generators to quickly seed databases and build test data in Yii2 apps. Useful for unit/functional tests and rapid prototyping with consistent, customizable fake datasets.

View on GitHub
Deep Wiki
Context7

基础用法

使用 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](https://github.com/tests)/unit/templates/fixtures)
/**
 * [@var](https://github.com/var) $faker \Faker\Generator
 * [@var](https://github.com/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](https://github.com/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](https://github.com/app)/path/to/my/custom/templates'

# 生成假数据到其它目录
php yii fixture/generate-all --fixtureDataPath='[@tests](https://github.com/tests)/acceptance/fixtures/data'

运行下面的命令查看所有可用的模板

# 列出默认模板目录的所有模板(默认使用 '[@tests](https://github.com/tests)/unit/templates/fixtures' 目录)
php yii fixture/templates

# 列出指定目录下可用的模板
php yii fixture/templates --templatePath='[@app](https://github.com/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',
        ],
    ],
]
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium