Skip to content

Commit

Permalink
Merge pull request yiisoft#1759 from Ragazzo/fixtures_controller_impr…
Browse files Browse the repository at this point in the history
…ovements

Added to the basic app, fixed config, added to core commands.
  • Loading branch information
cebe committed Jan 3, 2014
2 parents b0ff35c + 00ab5ef commit 08ee8b1
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 6 deletions.
14 changes: 14 additions & 0 deletions apps/basic/config/console.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<?php

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

$params = require(__DIR__ . '/params.php');
return [
'id' => 'basic-console',
Expand All @@ -19,6 +22,17 @@
],
],
],
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2basic',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'fixture' => [
'class' => 'yii\test\DbFixtureManager',
'basePath' => '@tests/unit/fixtures',
],
],
'params' => $params,
];
Empty file.
Empty file.
1 change: 1 addition & 0 deletions framework/yii/console/Application.php
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ public function coreCommands()
'migrate' => 'yii\console\controllers\MigrateController',
'cache' => 'yii\console\controllers\CacheController',
'asset' => 'yii\console\controllers\AssetController',
'fixture' => 'yii\console\controllers\FixtureController',
];
}

Expand Down
77 changes: 71 additions & 6 deletions framework/yii/console/controllers/FixtureController.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use yii\console\Controller;
use yii\console\Exception;
use yii\test\DbTestTrait;
use yii\helpers\Console;

/**
* This command manages fixtures load to the database tables.
Expand Down Expand Up @@ -103,21 +104,38 @@ public function beforeAction($action)
* you can specify table name as a second parameter.
* @param string $fixture
*/
public function actionApply($fixture)
public function actionApply(array $fixtures)
{
if ($this->getFixtureManager() == null) {
throw new Exception(
'Fixture manager is not configured properly. '
. 'Please refer to official documentation for this purposes.');
}

if (!$this->confirmApply($fixtures)) {
return;
}

$this->getFixtureManager()->basePath = $this->fixturePath;
$this->getFixtureManager()->db = $this->db;
$this->loadFixtures([$fixture]);
$this->loadFixtures($fixtures);
$this->notifySuccess($fixtures);
}

/**
* Truncate given table and clear all fixtures from it.
* @param string $table
* @param string $tables
*/
public function actionClear($table)
public function actionClear(array $tables)
{
$this->getDbConnection()->createCommand()->truncateTable($table)->execute();
echo "Table \"{$table}\" was successfully cleared. \n";
if (!$this->confirmClear($tables)) {
return;
}

foreach($tables as $table) {
$this->getDbConnection()->createCommand()->truncateTable($table)->execute();
$this->stdout("Table \"{$table}\" was successfully cleared. \n", Console::FG_GREEN);
}
}

/**
Expand Down Expand Up @@ -150,4 +168,51 @@ public function getDbConnection()
return $db;
}

/**
* Notifies user that fixtures were successfully loaded.
* @param array $fixtures
*/
private function notifySuccess($fixtures)
{
$this->stdout("Fixtures were successfully loaded from path: \n", Console::FG_YELLOW);
$this->stdout(realpath(Yii::getAlias($this->fixturePath)) . "\n\n", Console::FG_GREEN);
$this->outputList($fixtures);
}

/**
* Prompts user with confirmation if fixtures should be loaded.
* @param array $fixtures
* @return boolean
*/
private function confirmApply($fixtures)
{
$this->stdout("Fixtures will be loaded from path: \n", Console::FG_YELLOW);
$this->stdout(realpath(Yii::getAlias($this->fixturePath)) . "\n\n", Console::FG_GREEN);
$this->outputList($fixtures);
return $this->confirm('Load to database above fixtures?');
}

/**
* Prompts user with confirmation for tables that should be cleared.
* @param array $tables
* @return boolean
*/
private function confirmClear($tables)
{
$this->stdout("Tables below will be cleared: \n\n", Console::FG_YELLOW);
$this->outputList($tables);
return $this->confirm('Clear tables?');
}

/**
* Outputs data to the console as a list.
* @param array $data
*/
private function outputList($data)
{
foreach($data as $index => $item) {
$this->stdout($index +1 . ". " . $item . "\n", Console::FG_GREEN);
}
}

}

0 comments on commit 08ee8b1

Please sign in to comment.