api-skeletons / zf-doctrine-data-fixture
Requires
- php: ^7.1.0
- doctrine/data-fixtures: ^1.3.0
- doctrine/doctrine-module: ^1.2.0 || ^2.1.0
- zendframework/zend-eventmanager: ^3.0.0
- zendframework/zend-modulemanager: ^2.7.2 || ^3.0.0
- zendframework/zend-servicemanager: ^3.1.0
Requires (Dev)
- api-skeletons/coding-standard: ^1.0.0
- doctrine/doctrine-orm-module: ^1.1.0 || ^2.1
- dprevite/lint: ^1.0.0
- phpstan/phpstan-doctrine: ^0.9.1
- phpunit/phpunit: ^5.7.0
- squizlabs/php_codesniffer: ^3.2.0
- zendframework/zend-i18n: ^2.7.0
- zendframework/zend-test: ^3.0.0
README
该模块为 Zend Framework 2 提供命令行支持,用于 Doctrine 固定。通常项目会有多套针对不同对象管理器或模块(如第三方 API)的固定。在这种情况下,需要一种可以按组运行固定的工具。此外,固定必须能够使用依赖注入。为了满足这些需求,该模块使用基于组的可配置的 Zend 服务管理器。
发布版本
4.x 版本的标签支持 PHP 5.6 和 7.0。
5.x 版本的标签支持 PHP 7.1 及以上。
安装
此模块使用 composer 进行安装。有关 composer 文档,请参阅 getcomposer.org。
$ composer require api-skeletons/zf-doctrine-data-fixture ^2.0
将此模块添加到应用程序的配置中
'modules' => [ ... 'ZF\Doctrine\DataFixture', ],
zf-component-installer
如果您使用 zf-component-installer,则该插件将为您将 zf-doctrine-data-fixture 作为模块进行安装。
配置
该模块基于 Doctrine 配置构建。实现固定的模块中的配置是
return [ 'doctrine' => [ 'fixture' => [ 'group1' => [ 'object_manager' => 'doctrine.entitymanager.orm_default', 'invokables' => [ 'ModuleName\Fixture\FixtureOne' => 'ModuleName\Fixture\FixtureOne', ], 'factories' => [ 'ModuleName\Fixture\FixtureTwo' => 'ModuleName\Fixture\FixtureTwoFactory', ] ], 'group2' => [ 'object_manager' => 'doctrine.entitymanager.orm_zf_doctrine_audit', ... ], ], ], ];
每个组都是一个 Zend 服务管理器 配置。这允许完全控制您的固定依赖注入。
列出固定
index.php data-fixture:list [<group>]
列出所有对象管理器和它们的组,列出给定对象管理器的所有组,或指定对象管理器和组以列出组的所有固定。
从命令行执行固定
index.php data-fixture:import <group> [--purge-with-truncate] [--do-not-append]
必须指定 <group>
。
默认情况下不追加,并且这始终被 --append 覆盖。现在追加是默认选项。这与新的 --do-not-append 相反。
选项
--purge-with-truncate
如果指定,将在运行固定之前清除对象管理器的表。
--do-not-append
将在运行固定之前删除数据库中的所有数据。
从代码执行固定
对于单元测试或其他必须从代码中运行固定的情况,您必须使用 build
获取 DataFixtureManager
,然后将组名传递给服务管理器,然后手动将固定加载到 Loader
中。
use Doctrine\Common\DataFixtures\Executor\ORMExecutor; use Doctrine\Common\DataFixtures\Purger\ORMPurger; use ZF\Doctrine\DataFixture\Loader; // Run audit fixtures $dataFixtureManager = $application->getServiceManager() ->build('ZF\Doctrine\DataFixture\DataFixtureManager', ['group' => 'zf-doctrine-audit']); $loader = new Loader($dataFixtureManager); $purger = new ORMPurger(); $executor = new ORMExecutor($auditEntityManager, $purger); foreach ($dataFixtureManager->getAll() as $fixture) { $loader->addFixture($fixture); } $executor->execute($loader->getFixtures(), true);
获取帮助
index.php data-fixture:help
重要说明
- 您一次只能从命令行运行一个组。如果您需要运行多个,请创建一个脚本来按顺序运行它们。
- ServiceManager 在每个 DataFixtureManager 的 getServiceLocator() 中注入,这样您就可以使用从这个级别运行实例化器。这使得 DataFixtureManager 的工作方式类似于使用
$serviceListener->addServiceManager()
定义的插件管理器。 - 您不能使用抽象工厂。每个固定件都必须单独配置。
历史
此模块的 1.0 版本根据部分对象管理器别名对组进行分组。这限制了第三方固定件的分组和使用 ODM 的灵活性。
此模块是对 hounddog/doctrine-data-fixture-module 的几乎完全重写。所有模式都已更改,代码已缩减。该模块为我以及社区服务了很长时间。