league / tactician-doctrine
为使用Doctrine的Tactician命令提供插件,例如将每个命令包装在一个事务中
v1.2.0
2022-01-17 17:03 UTC
Requires
- php: >=7.1
- doctrine/dbal: ^2.4 || ^3.1.5
- league/tactician: ^1.1
Requires (Dev)
- doctrine/orm: ^2.4
- mockery/mockery: ^1.3.5
- phpunit/phpunit: ^7.5.20 || ^9.5.10
- squizlabs/php_codesniffer: ^3.6.2
- yoast/phpunit-polyfills: ^1.0
Suggests
- doctrine/orm: Required if you need to use ORM Transaction Middleware
README
此包为使用Doctrine组件(ORM或仅DBAL)的Tactician提供了插件。主要功能是能够将每个命令包装在一个独立的数据库事务中。
设置
通过Composer
$ composer require league/tactician-doctrine
接下来,将ORM\TransactionMiddleware
添加到您的CommandBus中
$commandBus = new \League\Tactician\CommandBus( [ new TransactionMiddleware($ormEntityManager) ] );
这样就完成了。您执行的每个命令现在都将打开和关闭一个新的事务。
如果命令触发了更多命令,请注意这些命令将在父事务中运行。建议您将每个命令作为一个单独的事务运行,以防止这种情况发生。为此,请使用Tactician核心中提供的LockingMiddleware
。这将内部排队命令,直到父命令完成。
如果在处理命令时抛出异常,事务将回滚,EntityManager关闭,并重新抛出异常。
Symfony集成
当使用[tactician-bundle] (https://github.com/thephpleague/tactician-bundle)时,不要忘记将Doctrine中间件添加到您的Symfony配置中
tactician:
commandbus:
default:
middleware:
- tactician.middleware.locking
- tactician.middleware.doctrine
- tactician.middleware.command_handler
测试
$ ./vendor/bin/phpunit
安全
安全信息可以在Tactician主仓库中找到。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。