devhelp/flow-control-bundle

Devhelp/FlowControl 库的供应商集成

安装: 22

依赖: 0

建议者: 0

安全: 0

星级: 2

关注者: 4

分支: 0

开放问题: 0

类型:symfony-bundle

1.0 2014-09-25 16:31 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:08:24 UTC


README

Build Status SensioLabsInsight

安装

Composer 是安装 FlowControlBundle 的首选方式,请访问 composer 网站 获取更多信息。

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

用途

FlowControlBundle 提供与 FlowControl 库 的集成,针对控制器操作。它允许您将操作定义为流程步骤,这意味着用户无法进入操作,除非他/她达到流程中的预期步骤。

例如,您可以

  • 为您的在线商店定义结账流程
  • 为不同的用例一次性定义多个流程

使用方法

github 上有一个可用的 沙盒应用程序,您可以在其中更仔细地查看此包及其使用方法。

在 config.yml 中定义您的流程

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

将控制器操作定义为流程步骤

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()
    {
        //...
    }
}

完成!

现在,如果您进入一个动作的 URL,该动作是某个流程中的步骤,并且该移动不是有效的,您的访问将被限制

常见问题解答

它是如何改变流程中的步骤的?

每个以成功或重定向响应结束的操作都被视为成功,结束此类操作将导致在每次有效移动中将流程中的当前步骤更改为当前步骤。

当前步骤存储在哪里?

'devhelp.flow_control.current_steps' 服务负责此操作。默认实现将当前步骤存储在会话中。

我如何更改当前步骤的存储方式?

目前无法从包本身进行配置(将很快实现),但您可以使用 CompilerPass 用自定义实现替换 'devhelp.flow_control.current_steps' 服务。

我不想让我的操作自动更新当前步骤

您可以在操作配置中禁用此功能。

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()
    {
        //...
    }
}

我如何手动更新我的移动?

请参阅 FlowStepsUpdateListener 以获取指导。

我如何自定义找不到有效步骤时的操作?

目前建议的方法是在 'kernel.exception' 事件上拦截 NoValidStepsFoundException 并替换响应。

鸣谢

由 Devhelp.pl (http://devhelp.pl) 提供