Commit ce2f58f0 by Qiang Xue

Merge pull request #2312 from Ragazzo/faker_controller_improved

Faker controller improved
parents 9669b321 3d6529ef
...@@ -69,7 +69,7 @@ use yii\helpers\FileHelper; ...@@ -69,7 +69,7 @@ use yii\helpers\FileHelper;
* ~~~ * ~~~
* *
* In the code above "users" is template name, after this command run, new file named same as template * In the code above "users" is template name, after this command run, new file named same as template
* will be created under the `$fixturePath` folder. * will be created under the `$fixtureDataPath` folder.
* You can generate fixtures for all templates by specifying keyword "all" * You can generate fixtures for all templates by specifying keyword "all"
* *
* ~~~ * ~~~
...@@ -77,7 +77,7 @@ use yii\helpers\FileHelper; ...@@ -77,7 +77,7 @@ use yii\helpers\FileHelper;
* ~~~ * ~~~
* *
* This command will generate fixtures for all template files that are stored under $templatePath and * This command will generate fixtures for all template files that are stored under $templatePath and
* store fixtures under $fixturePath with file names same as templates names. * store fixtures under `$fixtureDataPath` with file names same as templates names.
* *
* You can specify how many fixtures per file you need by the second parameter. In the code below we generate * You can specify how many fixtures per file you need by the second parameter. In the code below we generate
* all fixtures and in each file there will be 3 rows (fixtures). * all fixtures and in each file there will be 3 rows (fixtures).
...@@ -95,8 +95,8 @@ use yii\helpers\FileHelper; ...@@ -95,8 +95,8 @@ use yii\helpers\FileHelper;
* //read templates from the other path * //read templates from the other path
* yii fixture/generate all --templatePath=@app/path/to/my/custom/templates * yii fixture/generate all --templatePath=@app/path/to/my/custom/templates
* *
* //generate fixtures into other folders, but be sure that this folders exists or you will get notice about that. * //generate fixtures into other folders
* yii fixture/generate all --fixturePath=@tests/unit/fixtures/subfolder1/subfolder2/subfolder3 * yii fixture/generate all --fixtureDataPath=@tests/unit/fixtures/subfolder1/subfolder2/subfolder3
* ~~~ * ~~~
* *
* You also can create your own data providers for custom tables fields, see Faker library guide for more info (https://github.com/fzaninotto/Faker); * You also can create your own data providers for custom tables fields, see Faker library guide for more info (https://github.com/fzaninotto/Faker);
...@@ -148,24 +148,24 @@ class FixtureController extends \yii\console\controllers\FixtureController ...@@ -148,24 +148,24 @@ class FixtureController extends \yii\console\controllers\FixtureController
*/ */
public $defaultAction = 'generate'; public $defaultAction = 'generate';
/** /**
* Alias to the template path, where all tables templates are stored. * @var string Alias to the template path, where all tables templates are stored.
* @var string
*/ */
public $templatePath = '@tests/unit/templates/fixtures'; public $templatePath = '@tests/unit/templates/fixtures';
/** /**
* Language to use when generating fixtures data. * @var string Alias to the fixture data path, where data files should be written.
* @var string */
public $fixtureDataPath = '@tests/unit/fixtures/data';
/**
* @var string Language to use when generating fixtures data.
*/ */
public $language; public $language;
/** /**
* Additional data providers that can be created by user and will be added to the Faker generator. * @var array Additional data providers that can be created by user and will be added to the Faker generator.
* More info in [Faker](https://github.com/fzaninotto/Faker.) library docs. * More info in [Faker](https://github.com/fzaninotto/Faker.) library docs.
* @var array
*/ */
public $providers = []; public $providers = [];
/** /**
* Faker generator instance * @var \Faker\Generator Faker generator instance
* @var \Faker\Generator
*/ */
private $_generator; private $_generator;
...@@ -177,7 +177,7 @@ class FixtureController extends \yii\console\controllers\FixtureController ...@@ -177,7 +177,7 @@ class FixtureController extends \yii\console\controllers\FixtureController
public function globalOptions() public function globalOptions()
{ {
return array_merge(parent::globalOptions(), [ return array_merge(parent::globalOptions(), [
'templatePath', 'language' 'templatePath', 'language', 'fixtureDataPath'
]); ]);
} }
...@@ -201,7 +201,7 @@ class FixtureController extends \yii\console\controllers\FixtureController ...@@ -201,7 +201,7 @@ class FixtureController extends \yii\console\controllers\FixtureController
public function actionGenerate(array $file, $times = 2) public function actionGenerate(array $file, $times = 2)
{ {
$templatePath = Yii::getAlias($this->templatePath); $templatePath = Yii::getAlias($this->templatePath);
$fixturePath = Yii::getAlias($this->fixturePath); $fixtureDataPath = Yii::getAlias($this->fixtureDataPath);
if ($this->needToGenerateAll($file[0])) { if ($this->needToGenerateAll($file[0])) {
$files = FileHelper::findFiles($templatePath, ['only' => ['*.php']]); $files = FileHelper::findFiles($templatePath, ['only' => ['*.php']]);
...@@ -233,9 +233,10 @@ class FixtureController extends \yii\console\controllers\FixtureController ...@@ -233,9 +233,10 @@ class FixtureController extends \yii\console\controllers\FixtureController
} }
$content = $this->exportFixtures($fixtures); $content = $this->exportFixtures($fixtures);
$filePath = realpath($fixturePath . '/' . $fixtureFileName); FileHelper::createDirectory($fixtureDataPath);
file_put_contents($filePath, $content); file_put_contents($fixtureDataPath . '/'. $fixtureFileName, $content);
$this->stdout("Fixture file was generated under: $filePath\n", Console::FG_GREEN);
$this->stdout("Fixture file was generated under: $fixtureDataPath\n", Console::FG_GREEN);
} }
} }
...@@ -357,9 +358,9 @@ class FixtureController extends \yii\console\controllers\FixtureController ...@@ -357,9 +358,9 @@ class FixtureController extends \yii\console\controllers\FixtureController
public function confirmGeneration($files) public function confirmGeneration($files)
{ {
$this->stdout("Fixtures will be generated under the path: \n", Console::FG_YELLOW); $this->stdout("Fixtures will be generated under the path: \n", Console::FG_YELLOW);
$this->stdout(realpath(Yii::getAlias($this->fixturePath)) . "\n\n", Console::FG_GREEN); $this->stdout("\t" . Yii::getAlias($this->fixtureDataPath) . "\n\n", Console::FG_GREEN);
$this->stdout("Templates will be taken from path: \n", Console::FG_YELLOW); $this->stdout("Templates will be taken from path: \n", Console::FG_YELLOW);
$this->stdout(realpath(Yii::getAlias($this->templatePath)) . "\n\n", Console::FG_GREEN); $this->stdout("\t" . Yii::getAlias($this->templatePath) . "\n\n", Console::FG_GREEN);
foreach ($files as $index => $fileName) { foreach ($files as $index => $fileName) {
$this->stdout(" " . ($index + 1) . ". " . basename($fileName) . "\n", Console::FG_GREEN); $this->stdout(" " . ($index + 1) . ". " . basename($fileName) . "\n", Console::FG_GREEN);
......
...@@ -95,13 +95,14 @@ php yii fixture/generate users ...@@ -95,13 +95,14 @@ php yii fixture/generate users
//also a short version of this command ("generate" action is default) //also a short version of this command ("generate" action is default)
php yii fixture users php yii fixture users
//to generate fixtures for several tables, use "," as a separator, for example: //to generate several fixtures data files, use "," as a separator, for example:
php yii fixture users,profile,some_other_table php yii fixture users,profile,some_other_name
``` ```
In the code above "users" is template name, after this command run, new file named same as template In the code above "users" is template name, after this command run, new file named same as template
will be created under the fixtures path (by default ```@tests/unit/fixtures```) folder. will be created under the fixtures path (by default ```@tests/unit/fixtures```) folder.
You can generate fixtures for all templates by specifying keyword ```all```. You can generate fixtures for all templates by specifying keyword ```all```. You dont need to worry about if data file
directory already created or not, if not - it will be created by these command.
```php ```php
php yii fixture/generate all php yii fixture/generate all
...@@ -124,8 +125,8 @@ php yii fixture/generate users 5 --language='ru_RU' ...@@ -124,8 +125,8 @@ php yii fixture/generate users 5 --language='ru_RU'
//read templates from the other path //read templates from the other path
php yii fixture/generate all --templatePath='@app/path/to/my/custom/templates' php yii fixture/generate all --templatePath='@app/path/to/my/custom/templates'
//generate fixtures into other folders, but be sure that this folders exists or you will get notice about that. //generate fixtures into other directory.
php yii fixture/generate all --fixturePath='@tests/unit/fixtures/subfolder1/subfolder2/subfolder3' php yii fixture/generate all --fixtureDataPath='@tests/acceptance/fixtures/data'
``` ```
You also can create your own data providers for custom tables fields, see [Faker]((https://github.com/fzaninotto/Faker)) library guide for more info; You also can create your own data providers for custom tables fields, see [Faker]((https://github.com/fzaninotto/Faker)) library guide for more info;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment