Жизненный цикл диспетчирезации
Обработка события DISPATCH контроллера
Модуль реагирует на любое событие DISPATCH контроллера. В случае если в приложение произошел запуск диспетчирезации контроллера, не важно в результате http запроса, запуска из консоли или через внутренние механизмы zf, инициируется процесс проверяющий нужно ли использовать workflow.
Диспетчирезация workflow реализована в сервисе \OldTown\Workflow\ZF2\Dispatch\Dispatcher\Dispatcher.
Передача данных между слоями
Диспетчер устанавливат в объект \Zend\Mvc\MvcEvent, параметр workflowDispatchEvent. Значеним этого параметра является объект имплементирующий \OldTown\Workflow\ZF2\Dispatch\Dispatcher\WorkflowDispatchEventInterface.
Из объекта реализующего WorkflowDispatchEventInterface можно получить:
Метод | Описание |
---|---|
getMetadata | Метаданные необходимые для запуска wf |
getPrepareData | Результаты работы слоя, подготавливающие данные для wf |
getRunWorkflowParam | Параметры для запуска wf |
getWorkflowResult | Результаты работы wf |
Событийная модель сервиса
Имя события | Описание |
---|---|
workflow.dispatch.metadata | Получение метаданных для вызываемого action контроллера |
workflow.dispatch.prepareData | Запуск слоя, подготавливающего данные для wf |
workflow.dispatch.checkRunWorkflow | Проверка нужно ли запускать wf |
workflow.dispatch.metadataWorkflowToRun | Получить данные для запуска wf(managerName,actionName, а также entryId или workflowName) |
workflow.dispatch.run | Запуск wf |
Событие workflow.dispatch.metadata
Обработчик реализующий обработку данного события, должен возвращать объект имплементирующий \OldTown\Workflow\ZF2\Dispatch\Metadata\Storage\MetadataInterface. Модуль содержит поддержку метаданных на основе анотаций. При необходимости, добавить новый тип метаданных, нужно подписаться на данное событие, реализовать получение метаданных на основе своего адаптера и вернуть соответствующий результат.
Событие workflow.dispatch.prepareData
Подготовка данных для бизне слогики. Результатом работы должен быть массив, либо объект реализующий Traversable. Обработчиков может быть любое число. Результаты объеденяются.
Событие workflow.dispatch.checkRunWorkflow
Если необходимо контролировать процесс запуска workflow, то можно подписаться на данное событие. В случае если хотя бы один обработчик события возвращает false, то wf запущенна не будет.
Собыите workflow.dispatch.metadataWorkflowToRun
Для запуска нового процесса workflow либо для изменения состояния уже запущенного процесса необходимо знать:
Параметр | Назначение | Описание |
---|---|---|
runType | Тип действия | Тип действия initialize(новый процесс) или doAction (выполнить действие в существующем процессе) |
managerName | Имя менеджера wf | Имя менеджера workflow |
actionName | Имя выполняемого действия | Имя действия доступное на текущем шаге. Действие осуществляет переход в другой шаг. |
workflowName | Имя workflow | Ссылка на xml файл workflow. Парамет нужен если мы инициализируем новый процесс (Тип действия initialize) |
entryId | id процесса wf | Идентификатор уже запущенного процесса wf (Тип действия doAction) |
При бросание события workflow.dispatch.metadataWorkflowToRun ожидается что один из обработчиков вернет объект имплементирующий \OldTown\Workflow\ZF2\Dispatch\Dispatcher\RunWorkflowParamInterface. Данный объект содержит все необходимы данные для запуска wf.
Модуль реализует поддержку получения метаданных для запуска workflow: * На основе данных из роутера - \OldTown\Workflow\ZF2\Dispatch\RunParamsHandler\RouteHandler
Событие workflow.dispatch.run
Обработчику делегируется запуск wf. Результатом работы обработчика должен быть объект имплементирующий \OldTown\Workflow\ZF2\ServiceEngine\Workflow\TransitionResultInterface.