madewithlove/tactician-laravel

此包已被弃用,不再维护。作者建议使用league/tactician包。

集成 tactician 至 Laravel 5

1.0.3 2019-09-03 18:16 UTC

This package is auto-updated.

Last update: 2020-01-11 18:03:27 UTC


README

Build Status Latest Stable Version Total Downloads Scrutinizer Quality Score Code Coverage

简介

此包是 Laravel 5 默认命令总线的一个替代品,使用了tactician

默认中间件

  • LockingMiddleware(阻止命令在命令中运行)
  • TransactionMiddleware(在数据库事务中运行所有命令,失败时回滚)

命令处理

默认情况下,命令将按以下方式解析:

Acme\Jobs\Foo => Acme\Listeners\Foo
Acme\Foo\Jobs\Bar => Acme\Foo\Listeners\Bar

所有命令处理器都从容器中解析,这意味着您可以使用所有 Laravel 好玩的东西。

安装

$ composer require madewithlove/tactician-laravel

Laravel <= 5.4

将服务提供者添加到 config/app.php

Madewithlove\Tactician\ServiceProvider::class,

如果您想调整中间件,应发布包配置

php artisan vendor:publish --provider="Madewithlove\Tactician\ServiceProvider"

用法

编写命令

命令始终由两部分组成:命令和处理程序。

// Products\Jobs\CalculatePriceForQuantity
class CalculatePriceForQuantity
{
    public $price;

    public $amount;

    public function __construct($price, $amount = 1)
    {
        $this->price = $price;
        $this->amount = $amount;
    }
}

use Products\Jobs\CalculatePriceForQuantity as Job;

// Products\Listeners\CalculatePriceForQuantity
class CalculatePriceForQuantity
{
    public function handle(Job $job)
    {
        return $job->amount * $job->price;
    }
}

覆盖命令处理逻辑

如果您对这个包中提供的默认逻辑不满意,可以通过重新绑定 League\Tactician\Handler\CommandHandlerMiddleware 来轻松覆盖它。您可以通过将以下内容添加到应用程序的服务提供者中来实现,有关选项,请参阅Tactician 的文档

public function register()
{
    $this->app->bind(CommandHandlerMiddleware::class, function () {
        // Return your own implementation of CommandHandlerMiddleware here.
    });
}

中间件

此包包含一些特定于 Laravel 的中间件,您可以选择使用这些中间件。

TransactionMiddleware

此中间件默认包含。这意味着所有命令都在数据库事务中处理,如果发生错误,则会回滚事务。

通常,命令会抛出一个异常,该异常在上层被捕获,以便执行某些操作(例如显示错误消息),但仍需进行某种数据库交互。对于此类情况,您可以使用 Madewithlove\Tactician\Contracts\IgnoresRollback 接口。只需在您的异常上实现它,就不会执行回滚!

注意:此中间件仅在主数据库连接上运行事务,如果您使用多个连接,则需要制定自定义解决方案。

测试

$ composer test

许可证

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