我有一个任务,为更好的本地开发准备一个web应用程序(服务)。在开发环境中,它使用部分从生产环境中转储的数据库。这种方法现在对我们来说不是最好的解决方案。所以我们只能转储DB的模式,然后用虚拟数据填充本地数据库。
我的目标:一个创建fixture的控制台命令。它可以是这样的,但它是Yii2:(.
在这种情况下,我面临几个问题:
- 我了解到Yii1有一个用于创建fixture的特殊工具-定义fixture,但它在关于测试的主题中进行了描述。使用这个工具达到我的目的有多难?我是否必须自己编写控制台命令,或者是否存在更简单的方法?
- 有人可以建议特殊库的fixture,我可以"插件和使用";ii及其活动记录?我想使用DoctrineFixturesBundle,但它只适用于ORM,对吧?
谢谢。
对于使用fixture,您可以执行以下操作:
创建一个新命令:
protectedcommandsFixtureCommand.php
包含以下内容:
<?php
Yii::import('system.test.CDbFixtureManager');
class FixtureCommand extends CConsoleCommand {
public function actionIndex() {
/* @var $fixtureManager CDbFixtureManager */
$fixtureManager=new CDbFixtureManager();
$fixtureManager->basePath=Yii::getPathOfAlias('application.my_fixtures');
$fixtureManager->init();
// Just print some info about the tables
foreach ($fixtureManager->getFixtures() as $name => $path) {
echo "Loaded {$name} table from {$path}n";
}
}
}
创建目录protected/my_fixtures
并创建一些fixture:
protectedmy_fixturesproject.php
<?php
return array(
array(
'name' => 'Red project',
'company' => 'Red Ltd',
'open' => 1,
),
array(
'name' => 'Blue project',
'company' => 'Blue Ltd',
'open' => 1,
),
array(
'name' => 'Green project',
'company' => 'Green Ltd',
'open' => 0,
),
);
protectedmy_fixturestask.php
<?php
return array(
array(
'project_id' => '1',
'description' => 'Get the milk',
'completed' => 1,
),
array(
'project_id' => '1',
'description' => 'Get the eggs',
'completed' => 1,
),
array(
'project_id' => '1',
'description' => 'Walk the dog',
'completed' => 0,
),
);
最后,进入终端,运行命令:
C:Projectsfixtureappprotected>c:xamppphp56php.exe yiic.php fixture
Loaded project table from C:Projectsfixtureappprotectedmy_fixturesproject.php
Loaded task table from C:Projectsfixtureappprotectedmy_fixturestask.php
你可以在Github上找到完整的示例项目:
https://github.com/atrandafir/yii-1-fixtures
其他建议:
- 我希望您使用数据库迁移,以保持开发和生产实例之间的模式结构相同。
- 我非常推荐阅读API, Yii类的文档,并有"勇气";要使用和定制它们,请随意打开类文件,看看它们究竟是做什么的
- 如果当前的fixture管理器类不做你想要的,你也可以扩展和覆盖它的方法,甚至写一个新的基于原来的