机翻:使用此 Laravel 工作流程包创建操作和工作流程
原文链接:Create Actions and Workflows with this Laravel Workflows Package - Laravel News
Khalil Bouzidi的Safemood/laravel-workflow
包通过清晰的操作定义和事件跟踪简化了 Laravel 中的工作流程。使用此包,您可以定义复杂的工作流程,将其分解为操作,并定义事件。
在较高层次上,该包定义了Workflow
类,它由一个或多个Action
类组成。您可以使用包提供的命令创建操作和工作流程:
php artisan make:workflow PaymentWorkflow
php artisan make:action ValidateCartItems
该项目的自述文件包含以下ValidateCartItems
操作的示例:
namespace App\Actions;
use Safemood\Workflow\Action;
class ValidateCartItems extends Action
{
public function handle(array &$context)
{
// Simulate extra validation logic
if (empty($context['cart'])) {
throw new \Exception('Cart is empty');
}
// you can pass data to the next action if you want
$context['validated'] = true;
}
}
在工作流的handle()
方法中,您可以定义之前、主要和“之后”操作并跟踪事件。以下是包自述文件中的 PaymentWorkflow handle
方法示例:
public function handle()
{
// Actions to be executed before the main action
$this->addBeforeActions([
new ValidateCartItems(),
new CalculateTotal()
]);
// The main action of the workflow
$this->addMainAction(new MakePayment());
// Actions to be executed after the main action
$this->addAfterAction(new SendEmails()); // Normal laravel Job in this example
// Observers to register for specific entities
$this->registerObservers([
Order::class => OrderObserver::class,
]);
$this->trackEvents([
PaymentProcessed::class
]);
}
最后,您可以运行工作流程并断言工作流程的结果:
$context = [
'cart' => [
['id' => 1, 'name' => 'Product A', 'price' => 100, 'quantity' => 2],
['id' => 2, 'name' => 'Product B', 'price' => 50, 'quantity' => 1]
],
'user_id' => 123
];
// Execute the PaymentWorkflow with the provided context
$paymentWorkflow = (new PaymentWorkflow)->run($context);
// Check if the workflow execution was successful
$success = $paymentWorkflow->passes();
// Check if the workflow execution failed
$failure = $paymentWorkflow->failed();
您可以了解有关此软件包的更多信息、获取完整的安装说明并在 GitHub 上查看源代码。您可以使用以下命令通过 Laravel v10 和 v11 的 Composer 安装此软件包:
composer require safemood/laravel-workflow
本作品采用《CC 协议》,转载必须注明作者和本文链接
在什么场景使用
这文章太水了(我指的原文),基本上是把 github.com/safemood/laravel-workfl... 文档用自己的话又说了一遍,还没说全。
要说使用场景的话,就是适合所有使用场景,人家举得例子就是个基本的控制器方法。如果说和散着写代码有什么不同的话,就是人家将业务逻辑抽象为 “可复用的” 流程和动作。前面的引号取决于你的业务中是否真的存在流程或动作复用情况。