sidlee/flow-manager

一个库,用于辅助使用 Symfony2 的 HttpFoundation 组件创建和管理复杂向导流程。

1.0.0 2015-06-08 17:09 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:42:50 UTC


README

一个库,用于辅助使用 Symfony2 的 HttpFoundation 组件创建和管理复杂向导流程。

库维护者

用法

创建步骤

为了创建一个步骤,您必须创建一个实现了 SidLee\FlowManager\StepInterface 接口的类。如果您愿意,可以使用 SidLee\FlowManager\AbstractStep 作为模板。

use SidLee\FlowManager\AbstractStep;
use SidLee\FlowManager\NavigationResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class WizardStartStep extends AbstractStep
{
	public function handleRequest(Request $request, NavigationResponse $navResponse, $data) {
		return new Response("Hello World");
    }
}

为了在流程中引发导航,只需返回一个 SidLee\FlowManager\NavigationResponse 而不是 Symfony\Component\HttpFoundation\Response

use SidLee\FlowManager\AbstractStep;
use SidLee\FlowManager\NavigationDirection;
use SidLee\FlowManager\NavigationResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class WizardStartStep extends AbstractStep
{
	public function handleRequest(Request $request, NavigationResponse $navResponse, $data) {
        if($request->request->getAlpha('navigation') === 'NEXT') {
            return new NavigationResponse(NavigationDirection::NEXT());
        }
		return new Response("Hello World");
    }
}

创建流程

向导(或流程)是通过一个称为 SidLee\FlowManager\StepCollection 的专用集合创建和管理的。

为了创建一个流程,您必须首先使用所需的步骤(及其名称)填充您的 StepCollection

use SidLee\FlowManager\StepCollection;

$stepCollection = new StepCollection();
$stepCollection->add('start', new WizardStartStep());
$stepCollection->add('accountInfo', new AccountInformationStep());
$stepCollection->add('confirmAccountInfo', new AccountInformationConfirmationStep());
$stepCollection->add('welcome', new WelcomeStep());

对于更复杂的流程,您还可以嵌套 StepCollection 实例(使用 add() 与一个 StepCollection 而不是 StepInterface)。

使用创建的流程

一旦创建了流程,您必须创建一个 SidLee\FlowManager\AbstractFlowManager 的实现,该实现将能够管理该流程。

您必须实现以下功能

  • getCurrentStepName()
    此函数负责从底层数据源获取当前步骤名称。

  • setCurrentStepNameToData() 此函数负责在底层数据源中设置当前步骤名称。

  • getNavigationHttpResponse() 此函数在需要步骤间导航时返回一个 Symfony\Component\HttpFoundation\Response

完成您的实现后,您可以通过指定根键和表示您流程的 StepCollection 来创建您的 FlowManager 的实例。您还可以传递用于事件的所需 EventDispatcher

步骤标识符

步骤将被分配一个基于名称以及在 StepCollection 中的嵌套级别以及传递给 FlowManager 的根键的字符串标识符。

假设您在 StepCollection 内部有如下结构

- wizard_start
- registration_subflow
    - account_information
    - credentials_information
    - captcha
- download_client
- welcome

并且您的 FlowManager 中的根键是 "firstTimeSetup"。这些步骤将被赋予以下完全合格的标识符

- firstTimeSetup.wizard_start
- firstTimeSetup.registration_subflow.account_information
- firstTimeSetup.registration_subflow.credentials_information
- firstTimeSetup.registration_subflow.captcha
- firstTimeSetup.download_client
- firstTimeSetup.welcome

这些标识符可以用于使用 NavigationDirection::DIRECT() 直接导航到步骤。