The Safemood/laravel-workflow package by Khalil Bouzidi simplifies workflows in Laravel with clear action definitions and event tracking. With this package, you can define complex workflows, break them up into actions, and define events.
At a high level, this package defines Workflow classes, which consist of one or more Action classes. You can create actions and workflows using the package’s provided command:
php artisan make:workflow PaymentWorkflow
php artisan make:action ValidateCartItems
The project’s readme has this example for a ValidateCartItems action:
namespace AppActions;
use SafemoodWorkflowAction;
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;
}
}
In the workflow’s handle() method, you can define before, main, and “after” actions and track events. Here’s an example PaymentWorkflow handle method from the package’s readme:
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
]);
}
Finally, you can run the workflow and assert the results from the workflow:
$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();
You can learn more about this package, get full installation instructions, and view the source code on GitHub. You can install this package via Composer for Laravel v10 and v11 using the following command:
composer require safemood/laravel-workflow
The post Create Actions and Workflows with this Laravel Workflows Package appeared first on Laravel News.
Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.
Source: Read MoreÂ