VictorMln/laravel-tactician

Laravel 版本的 Tactician 命令总线实现

1.1.0 2020-12-08 22:00 UTC

This package is auto-updated.

Last update: 2024-09-10 06:48:32 UTC


README

Laravel Tactician 是由 Ross Tuck 实现的 Command Bus Tactician,并基于 joselfonseca/laravel-tactician 开发

Build Status Latest Stable Version Code Coverage Scrutinizer Code Quality

安装

简单地执行 composer require

    composer require victormln/laravel-tactician:1.0.*

或者在 composer.json 文件中添加这一行

    "victormln/laravel-tactician" : "1.0.*"

其他

下载完依赖后,将服务提供者添加到 config/app.php 文件中

    'providers' => [
        ...
        Victormln\LaravelTactician\Providers\LaravelTacticianServiceProvider::class
        ...
    ]

安装完成!

使用方法

要使用命令总线,可以从 Laravel 容器中解析出总线,如下所示

    $bus = app('Victormln\LaravelTactician\CommandBusInterface');

或者您可以将它注入到类的构造函数中

    use Victormln\LaravelTactician\CommandBusInterface;

    class MyController extends BaseController
    {

        /** @var CommandBusInterface */
        private $bus;

        public function __construct(CommandBusInterface $bus)
        {
            $this->bus = $bus;
        }

    }

注入命令总线后,您可以通过以下方式分发命令

    // First parameter expects the command
    $bus->dispatch(new SimpleCommand());

注意:此包自动从与命令相同的路径中获取 CommandHandler,因此您无需进行任何操作来绑定两个文件。但是,如果您愿意,可以通过调用 addHandler 方法手动绑定命令处理器

    $bus->addHandler('Path\SimpleCommand', 'Path\SimpleCommandHandler');
    $bus->dispatch(new SimpleCommand());

有关 Tactician 命令总线的更多信息,请访问 http://tactician.thephpleague.com/

示例

查看这个简单创建订单命令的包实现示例 https://gist.github.com/victormln/f06a86f7204b251d6d6c876d5e516a67

绑定

您可以通过发布配置文件来配置定位器、屈折词、提取器和默认总线绑定

    php artisan vendor:publish --provider="Victormln\LaravelTactician\Providers\LaravelTacticianServiceProvider"

然后您可以修改每个类名,它们将来自 Laravel 容器进行解析

    return [
        // The locator to bind
        'locator' => 'Victormln\LaravelTactician\Locator\LaravelLocator',
        // The inflector to bind
        'inflector' => 'League\Tactician\Handler\MethodNameInflector\HandleInflector',
        // The extractor to bind
        'extractor' => 'League\Tactician\Handler\CommandNameExtractor\ClassNameExtractor',
        // The bus to bind
        'bus' => 'Victormln\LaravelTactician\Bus'
    ];

生成器

您可以使用 artisan 自动生成 Commands 和 Handlers

artisan make:tactician:command Foo
artisan make:tactician:handler Foo

这将创建 FooCommand 和 FooCommandHandler,并将它们分别放置在 app/CommandBus/Commands 和 app/CommandBus/Handlers 中

同时运行两者

artisan make:tactician Foo

包含中间件

Laravel tactician 包含一些您可以在命令中使用的有用中间件

  • 数据库事务:此中间件将在数据库事务中运行命令,如果抛出任何异常,事务将不会被提交,数据库将保持完整,您可以在 Victormln\LaravelTactician\Middleware\DatabaseTransactions 中找到此中间件。

变更日志

请查看发行页面 https://github.com/victormln/laravel-tactician/releases

测试

要运行此包中的测试,请导航到项目的根目录并运行

    composer install

然后

    vendor/bin/phpunit

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何安全相关的问题,请通过电子邮件 jose at ditecnologia dot com 而不是使用问题跟踪器

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 以获取更多信息。