madewithlove / tactician-laravel
1.0.3
2019-09-03 18:16 UTC
Requires
- php: >=7.2
- illuminate/container: ^5.0|^6.0|^7.0
- illuminate/database: ^5.0|^6.0|^7.0
- illuminate/support: ^5.0|^6.0|^7.0
- league/tactician: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- madewithlove/php-cs-fixer-config: ^1.10
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ^8.3
This package is auto-updated.
Last update: 2020-01-11 18:03:27 UTC
README
简介
此包是 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)。更多信息请参阅许可证文件。