sidlee / flow-manager
一个库,用于辅助使用 Symfony2 的 HttpFoundation 组件创建和管理复杂向导流程。
Requires
- php: >=5.3.3
Requires (Dev)
- eloquent/enumeration: ~5.0
- phpunit/phpunit: 3.7.*
- symfony/event-dispatcher: ~2.3
- symfony/http-foundation: ~2.3
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() 直接导航到步骤。