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()
直接导航到步骤。