league/tactician-doctrine

为使用Doctrine的Tactician命令提供插件,例如将每个命令包装在一个事务中

v1.2.0 2022-01-17 17:03 UTC

This package is auto-updated.

Last update: 2024-09-17 22:39:46 UTC


README

Latest Version Software License Build Status Quality Score Total Downloads

此包为使用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)。有关更多信息,请参阅许可文件