PHPackages                             devhelp/flow-control-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. devhelp/flow-control-bundle

ActiveSymfony-bundle[Payment Processing](/categories/payments)

devhelp/flow-control-bundle
===========================

Provider integration with Devhelp/FlowControl library

1.0(11y ago)224MITPHPPHP &gt;=5.3.3

Since Sep 25Pushed 11y ago3 watchersCompare

[ Source](https://github.com/devhelp/FlowControlBundle)[ Packagist](https://packagist.org/packages/devhelp/flow-control-bundle)[ Docs](http://devhelp.pl)[ RSS](/packages/devhelp-flow-control-bundle/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (5)Versions (2)Used By (0)

[![Build Status](https://camo.githubusercontent.com/86ec45ef94d396345aa09a4911816151da626957f05b22a0799008bda08423d3/68747470733a2f2f7472617669732d63692e6f72672f64657668656c702f466c6f77436f6e74726f6c42756e646c652e706e67)](https://travis-ci.org/devhelp/FlowControlBundle) [![SensioLabsInsight](https://camo.githubusercontent.com/6987142e690634cd86f78d66a73d6cb827ab0dae3d2fe9397a85e8622530b913/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f63663032343031302d316131312d343763382d393838612d6262306238653261616335362f6d696e692e706e67)](https://insight.sensiolabs.com/projects/1dc1cc7b-a147-4202-8bb7-0768ec6d82a3)

Installation
------------

[](#installation)

Composer is preferred way to install FlowControlBundle, please check [composer website](http://getcomposer.org) for more information.

```
$ composer require 'devhelp/flow-control-bundle:dev-master'

```

Purpose
-------

[](#purpose)

FlowControlBundle provides integration with [FlowControl library](https://github.com/devhelp/flow-control) regarding controller actions. It allows you to define your actions as flow steps, meaning that user won't be able to enter an action unless he/she reaches expected step in your flow.

You can, for example:

- define checkout flow for your online store
- define multiple flows at once for different use cases

Usage
-----

[](#usage)

There is a **sandbox app** available on [github](https://github.com/devhelp/FlowControlBundleSandbox) where you can take closer look at the bundle and how it can be used

### Define your flow in config.yml

[](#define-your-flow-in-configyml)

```
devhelp_flow_control:
    flows:
        #your flow name
        my_checkout_flow:
            moves:
                order_configuration:  [order_summary]
                order_summary:        [order_configuration, payment]
                payment:              [order_configuration, order_summary, payment_summary]
            entry_points:             [order_configuration]
        my_simple_checkout_flow:
            moves:
                buy_now:              [order_summary]
                order_summary:        [payment]
                payment:              [payment_summary]
            entry_points:             [buy_now]
        #multiple flows can be defined

```

### Define controller actions as flow steps

[](#define-controller-actions-as-flow-steps)

```
use Devhelp\FlowControlBundle\FlowConfiguration\Annotation\Flow;

class OrderController
{
   /**
     * @Flow(name="my_simple_checkout_flow", step="buy_now")
     */
    public function buyNowAction()
    {
        //...
    }

    /**
     * @Flow(name="my_checkout_flow", step="order_configuration")
     */
    public function configureAction()
    {
        //...
    }

    /**
     * @Flow(name="my_checkout_flow", step="order_summary")
     * @Flow(name="my_simple_checkout_flow", step="order_summary")
     */
    public function summaryAction()
    {
        //...
    }
}

```

```
use Devhelp\FlowControlBundle\FlowConfiguration\Annotation\Flow;

class PaymentController
{
    /**
     * @Flow(name="my_checkout_flow", step="payment")
     * @Flow(name="my_simple_checkout_flow", step="payment")
     */
    public function paymentAction()
    {
        //...
    }

    /**
     * @Flow(name="my_checkout_flow", step="payment_summary")
     * @Flow(name="my_simple_checkout_flow", step="payment_summary")
     */
    public function summaryAction()
    {
        //...
    }
}

```

### Done!

[](#done)

Now if you enter an url for action that is a step in some flow, your access will be restricted if the move is not valid

FAQ
---

[](#faq)

### How does it change the steps in flow ?

[](#how-does-it-change-the-steps-in-flow-)

Every action that ends with successful or redirect response is treated as success and ending such action will result in changing current step in the flow for every valid move

### Where are the current steps stored ?

[](#where-are-the-current-steps-stored-)

'devhelp.flow\_control.current\_steps' service is responsible for it. Default implementation stores current steps in session

### How can I change the way current steps are stored

[](#how-can-i-change-the-way-current-steps-are-stored)

Right now it is not configurable from the bundle itself (will be soon), but you can use CompilerPass to replace 'devhelp.flow\_control.current\_steps' service with custom implementation

### I don't want my action to automatically update current steps

[](#i-dont-want-my-action-to-automatically-update-current-steps)

You can disable this in action configuration

```
use Devhelp\FlowControlBundle\FlowConfiguration\Annotation\Flow;
use Devhelp\FlowControlBundle\FlowConfiguration\Annotation\DisableAutocommit;

class ExampleController
{
    /**
     * @Flow(name="my_flow", step="my_step")
     * @DisableAutocommit
     */
    public function fooAction()
    {
        //...
    }
}

```

### How can I manually update my moves ?

[](#how-can-i-manually-update-my-moves-)

Take a look at the FlowStepsUpdateListener for guidance

### How can I customize what happens once no valid steps are found for the action ?

[](#how-can-i-customize-what-happens-once-no-valid-steps-are-found-for-the-action-)

Currently suggested way is to intercept NoValidStepsFoundException on 'kernel.exception' event and replace the Response

Credits
-------

[](#credits)

Brought to you by : Devhelp.pl ()

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

4253d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1479355?v=4)[devhelp](/maintainers/devhelp)[@devhelp](https://github.com/devhelp)

---

Top Contributors

[![pawelbaranski](https://avatars.githubusercontent.com/u/219097?v=4)](https://github.com/pawelbaranski "pawelbaranski (11 commits)")

---

Tags

flowcheckout

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/devhelp-flow-control-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/devhelp-flow-control-bundle/health.svg)](https://phpackages.com/packages/devhelp-flow-control-bundle)
```

###  Alternatives

[league/omnipay

Omnipay payment processing library

6.1k9.7M166](/packages/league-omnipay)[liqpay/liqpay

SDK for Liqpay

111678.8k9](/packages/liqpay-liqpay)[flux-se/sylius-payum-stripe-plugin

Payum Stripe gateways plugin for Sylius.

61342.2k](/packages/flux-se-sylius-payum-stripe-plugin)[sumup/sumup-ecom-php-sdk

SumUp PHP SDK

51277.1k1](/packages/sumup-sumup-ecom-php-sdk)[payum/stripe

The Payum extension. It provides Stripe payment integration.

22573.1k3](/packages/payum-stripe)[phpjuice/paypal-checkout-sdk

PayPal's PHP SDK for Checkout REST APIs

5858.1k](/packages/phpjuice-paypal-checkout-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
