Workflow Builder

Phlow provides a fluent API that can be used to built your Workflows. While it is possible to glue multiple Workflow Nodes together without using the builder, this approach is quite verbose.

The following examples can help you get started with the WorkflowBuilder:

Initiate a Workflow

The start method creates a new instance of Phlow\Node\Start and appends it to the Workflow. No configuration is needed for this node.

$builder->start();

Execute a Callback

The callback method creates a new instance of Phlow\Node\Callback and appends it to the Workflow. This node accepts an optional callback which be invoked during execution.

$builder->callback(function($data) {
    // Do you magic here
    return $data;
});

Please note that the callback is left optional on purpose, so the same builder can be used for modeling only. The callback is required only when executing the workflow

$builder->callback();

Conditional Flow

The choice method creates a new instance of Phlow\Node\Choice and appends it to the Workflow. The result can be chained with when and / or otherwise methods, to define the conditional flows.

$builder
    ->choice()
        ->when('key == 0')
            // Nodes to be executed when key == 0
        ->otherwise()
            // Nodes to be executed when key <> 0
        ->end();

Terminating a Workflow

The end method creates a new instance of Phlow\Node\End and appends it to the Workflow. No configuration is needed for this node.

$builder->end();

It is also possible to end all opened node instances by calling endAll as below:

$builder->endAll();

Catching Errors

The catch method creates a new instance of Error.

When executing the Workflow, the Error will be triggered once an Exception matching the class is provided.

$builder
    ->catch(\RuntimeException::class)
    ->callback()
    ->end();

It is also possible to catch all the exceptions by using the method catchAll.

$builder
    ->catchAll()
    ->callback()
    ->end();

Collections

The following operations can be used when working with Collections. By Collections we refer to any variable that it is an array or an object implementing Traversable