devhelp/flow-control
Laravel/PHP utilities for controlling application flow: helpers and patterns for branching, conditional execution, retries, and early exits. Designed to simplify complex control logic and keep code paths readable and consistent across projects.
Composer is preferred to install Flow Control, please check composer website for more information.
$ composer require 'devhelp/flow-control:dev-master'
Flow Control is a simple tool that allows to control the flow defined in the Flow class.
Two main classes are Flow and FlowControl. Flow is defined using moves array and entry points. FlowControl is used to control state changes in flows.
Concept of the flow is general, some obvious use case can be, to define and control flow in checkout process
//two way flow with optional 'step_c'
$exampleFlowA = new Flow(
'flow_a',
array(
'step_a' => array('step_b'),
'step_b' => array('step_a', 'step_c', 'step_d'),
'step_c' => array('step_b', 'step_d'),
'step_d' => array('step_b', 'step_c')
),
array('step_a')
);
//one way flow
$exampleFlowB = new Flow(
'flow_b',
array(
'step_a' => array('step_b'),
'step_b' => array('step_c'),
'step_c' => array('step_d'),
),
array('step_a')
);
$flows = array($exampleFlowA, $exampleFlowB);
$repository = new SimpleFlowRepository($flows);
$flowControl = new FlowControl($repository);
/**
* origin of current steps is out of the scope of FlowControl component,
* the same is regarding changing the state in the flow. FlowControl
* is only for resolving valid moves
*/
$currentSteps = array(
'flow_a' => 'step_c',
);
$flowControl->setFlowSteps($currentSteps);
$flowControl->isAllowed('step_d', 'flow_a'); //true
$flowControl->isAllowed('step_a', 'flow_a'); //false
$flowControl->isAllowed('step_c', 'flow_a'); //true
$flowControl->isAllowed('step_a', 'flow_b'); //true
$flowControl->isAllowed('step_b', 'flow_b'); //false
$moves = array(
'flow_a' => 'step_d',
'flow_b' => 'step_b',
);
$validMoves = $flowControl->resolveValid($moves); //array('flow_a' => 'step_d')
Brought to you by : Devhelp.pl (http://devhelp.pl)
How can I help you explore Laravel packages today?