1. Go to this page and download the library: Download juststeveking/laravel-flows library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
juststeveking / laravel-flows example snippets
use JustSteveKing\Flows\Flow;
use App\Flows\Steps\DummyStep;
$result = Flow::start()->run(
action: DummyStep::class,
)->execute(
payload: 'Initial payload',
);
use JustSteveKing\Flows\Flow;
use App\Flows\Conditions\IsSupplier;
use App\Flows\Steps\CommonStep;
use App\Flows\Steps\SupplierStep;
$result = Flow::start()->run(
action: CommonStep::class,
)->branch(
condition: IsSupplier::class,
callback: fn(array $payload): array => Flow::start()->run(
action: SupplierStep::class,
)->execute(payload: $payload),
)->execute(payload: $payload);
declare(strict_types=1);
namespace App\Workflows;
use App\Flows\Flow;
use App\Flows\Conditions\IsVIPUser;
final class UserRegistrationWorkflow
{
/**
* Run the user registration workflow.
*
* @param array $registrationData
* @return array Processed registration data
*/
public static function run(array $registrationData): array
{
return Flow::start()
->run(\App\Workflows\Steps\ValidateRegistrationData::class)
->run(\App\Workflows\Steps\HashPassword::class)
->run(\App\Workflows\Steps\CreateUser::class)
->run(\App\Workflows\Steps\SendWelcomeEmail::class)
->branch(
condition: IsVIPUser::class,
callback: fn(array $data): array => Flow::start()
->run(\App\Workflows\Steps\SendVIPWelcomeEmail::class)
->execute($data)
)
->run(\App\Workflows\Steps\LogRegistration::class)
->execute($registrationData);
}
}
namespace JustSteveKing\Flows\Contracts;
use Closure;
interface FlowStep
{
/**
* Process the payload and pass it to the next step.
*
* @param mixed $payload
* @param Closure $next
* @return mixed
*/
public function handle(mixed $payload, Closure $next): mixed;
}
namespace App\Workflows\Steps;
use Closure;
use JustSteveKing\Flows\Contracts\FlowStep;
class ValidateRegistrationData implements FlowStep
{
public function handle(mixed $payload, Closure $next): mixed
{
// Perform your validation logic here.
if (empty($payload['email'])) {
throw new \InvalidArgumentException('Email is
namespace JustSteveKing\Flows\Contracts;
interface FlowCondition
{
/**
* Evaluate the condition for the given payload.
*
* @param mixed $payload
* @return bool
*/
public function __invoke(mixed $payload): bool;
}
namespace App\Workflows\Conditions;
use JustSteveKing\Flows\Contracts\FlowCondition;
class IsVIPUser implements FlowCondition
{
public function __invoke(mixed $payload): bool
{
return isset($payload['vip']) && $payload['vip'] === true;
}
}
use JustSteveKing\Flows\Flow;
use App\Flows\Steps\StepTwo;
use App\Flows\Steps\StepFour;
$shouldRunStepFour = function ($payload): bool {
return !empty($payload['processStepFour']);
};
$result = Flow::start()
->run(action: StepTwo::class)
->runIf($shouldRunStepFour, StepFour::class)
->execute(payload: ['processStepFour' => false, 'data' => 'test']);
use JustSteveKing\Flows\Flow;
$flow = Flow::start()->run(
action: RiskyOperation::class,
)->catch(
errorHandler: function (Throwable $e, mixed $payload) {
// Handle the exception
return $payload; // or return modified payload
},
);
use JustSteveKing\Flows\Flow;
$reusableFlow = function (Flow $flow) {
$flow->run(CreateUser::class);
}
$flow = Flow::start()->with($reusableFlow);
use JustSteveKing\Flows\Flow;
final class ReusableFlow
{
public function __invoke(Flow $flow): void
{
$flow->run(CreateUser::class);
}
}
$flow = Flow::start()->with(new ReusableFlow());
use JustSteveKing\Flows\Flow;
use App\Workflows\Steps\HashPassword;
use App\Workflows\Steps\CreateUser;
use App\Workflows\Conditions\IsVIPUser;
use App\Workflows\Steps\SendVIPWelcomeEmail;
$registrationData = [
'email' => '[email protected]',
'password' => 'secret',
'vip' => true,
// Other registration data...
];
$result = Flow::start()->run(
action: HashPassword::class,
)->run(
action: CreateUser::class,
)->branch(
condition: IsVIPUser::class,
callback: fn(array $data): array => Flow::start()->run(
action: SendVIPWelcomeEmail::class,
)->execute(
payload: $data,
),
)->execute(
payload: $registrationData,
);
use JustSteveKing\Flows\Flow;
use App\Flows\Steps\HashPassword;
use Illuminate\Support\Facades\Log;
$result = Flow::start()
->debug(Log::channel('stack')) // Inject the logger you want to use.
->run(HashPassword::class)
->execute('initial payload');
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.