api-skeletons / doctrine-data-fixture
Laminas 的 Doctrine 数据固定,支持分组
Requires
- php: ^7.2.0 || ~8.0
- doctrine/data-fixtures: ^1.3.0
- doctrine/doctrine-module: ^2.1 || ^4.0 || ^5.0
- laminas/laminas-eventmanager: ^3.0
- laminas/laminas-modulemanager: ^2.7.2 || ^3.0.0
- laminas/laminas-servicemanager: ^3.1
Requires (Dev)
- api-skeletons/coding-standard: ^1.0.0
- doctrine/doctrine-orm-module: ^2.1 || ^3.0 || ^4.0 || ^5.0
- dprevite/lint: ^1.0.0
- laminas/laminas-i18n: ^2.7
- laminas/laminas-test: ^3.0 || ^4.0
- phpstan/phpstan-doctrine: ^1.2
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.2.0
README
本模块为 Laminas 提供了 Doctrine 固定的命令行支持。通常,项目将会有多组固定值,用于不同的对象管理器或模块,例如来自第三方 API 的模块。在这种情况下,需要一个可以按组运行固定值的工具。此外,固定值必须可用依赖注入。为了满足这些需求,该模块使用一个可按组配置的服务管理器。
版本
6.x 版本标签支持 PHP 7.2 及以上版本。
安装
本模块的安装使用 composer。有关 composer 文档,请参阅 getcomposer.org。
$ composer require api-skeletons/doctrine-data-fixture
将此模块添加到您的应用程序配置中
'modules' => [ ... 'ApiSkeletons\Doctrine\DataFixture', ],
laminas-component-installer
如果您使用 laminas-component-installer,该插件将为您安装 doctrine-data-fixture 作为模块。
配置
此模块建立在 Doctrine 配置之上。实现固定的模块中的配置为
return [ 'doctrine' => [ 'fixture' => [ 'group1' => [ 'object_manager' => 'doctrine.entitymanager.orm_default', 'executor' => Executor::class, 'purger' => Purger::class, 'invokables' => [ 'ModuleName\Fixture\FixtureOne' => 'ModuleName\Fixture\FixtureOne', ], 'factories' => [ 'ModuleName\Fixture\FixtureTwo' => 'ModuleName\Fixture\FixtureTwoFactory', ] ], 'group2' => [ 'object_manager' => 'doctrine.entitymanager.orm_zf_doctrine_audit', ... ], ], ], ];
每个组都是一个 Laminas 服务管理器 配置。这允许对您的固定值进行完整的依赖注入控制。
'executor' 和 'purger' 键是可选的,允许为这些功能使用自定义类。如果省略,将使用 Doctrine ORM 类。
列出固定值
index.php data-fixture:list [<group>]
列出所有对象管理器和它们的组,列出给定对象管理器的所有组,或指定对象管理器和组以列出组的所有固定值。
从命令行执行固定值
index.php data-fixture:import <group> [--purge-with-truncate] [--do-not-append]
<group>
是必需的。
追加是默认选项。这与新的 --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 ApiSkeletons\Doctrine\DataFixture\Loader; // Run audit fixtures $dataFixtureManager = $application->getServiceManager() ->build('ApiSkeletons\Doctrine\DataFixture\DataFixtureManager', ['group' => 'group-name']); $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
重要说明
- 您一次只能从命令行运行一个组。如果需要运行多个,请创建一个脚本按顺序运行它们。
- 服务管理器在
getServiceLocator()
时注入到每个 DataFixtureManager 中,因此您可以使用从这个级别运行的实例化器。这使得 DataFixtureManager 的工作方式类似于使用$serviceListener->addServiceManager()
定义的插件管理器。 - 您不能使用抽象工厂。每个固定值都必须单独配置。