Метаданные на основе анотаций для указания слоев

Пример описания слоев, через анотации


namespace OldTown\Workflow\ZF2\Dispatch\PhpUnit\TestData\IntegrationTest;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use OldTown\Workflow\ZF2\Dispatch\Annotation as WFD;
use OldTown\Workflow\ZF2\Dispatch\Dispatcher\Dispatcher;


/**
 * Class TestController
 *
 * @package OldTown\Workflow\ZF2\Dispatch\PhpUnit\TestData\IntegrationTest
 */
class TestController extends AbstractActionController
{

    /**
     * Подготовка данных для workflow
     *
     * @return array
     */
    public function prepareWorkflowDataHandler()
    {
        return [
            'test' => 'testData'
        ];
    }

    /**
     * Условие для запуска workflow
     */
    public function testCondition()
    {
        return true;
    }


    /**
     * @WFD\WorkflowDispatch(enabled=true, activity="initialize")
     * @WFD\PrepareData(type="method", handler="prepareWorkflowDataHandler", enabled=true)
     * @WFD\DispatchConditions(
     *     conditions={
     *         @WFD\Condition(type="method", handler="testCondition"),
     *         @WFD\Condition(type="service", handler="httpMethod", params={"allowedHttpMethods":{"GET"}})
     *     }
     * )
     */
    public function testAction()
    {
        $this->getEvent()->getParam(Dispatcher::WORKFLOW_DISPATCH_EVENT);

        $viewModel = new ViewModel();
        $viewModel->setTerminal(true);

        return $viewModel;
    }
}

Использование анотаций

Необходимо с помощью use, декларировать использование пространства имен OldTown\Workflow\ZF2\Dispatch\Annotation.

use OldTown\Workflow\ZF2\Dispatch\Annotation as WFD;

Для удобства использования, указать псевдоним для данного пространства имен. В качестве рекоменации предлагается использовать псевдоним WFD (WorkFlowDispatch)

Подключение слоя prepare data

Для подключения слоя PrepareData используется следующая анотация:

@WFD\PrepareData(type="method", handler="prepareWorkflowDataHandler", enabled=true)

Описание параметров:

Название параметра Обязательный Значение по умолчанию Описание
enabled Нет true Включает/выключает использование слоя подготавливающего данные для wf
type Да Определят тип обработчика
handler Да Указывает имя обработчика

Типы обработчиков

На данный момент поддерживается только один тип обработчика "method". Данный тип указывает на то, что обработчиком является метод текущего контроллера.

Имя обработчика

Тип обработчика Описание
method Содержит имя метода контроллера, в котором реализованна подготовка данных для wf

Результаты работы слоя prepare data

Результаты работы слоя prepare data, долж быть обязательно либо массивом, либо объектом который реализует интерфейс Traversable

Запуск workflow (слой бизнес логики)

Для запуска workflow необходимо использовать следующую анотацию

@WFD\WorkflowDispatch(enabled=true, activity="initialize")

Описание параметров:

Название параметра Обязательный Значение по умолчанию Описание
enabled Нет true Включает/выключает использование wf
activity Да Определят действие для wf (doAction или initialize)

Возможные действия для wf

  • initialize - создает новый процесс wf
  • doAction - осуществляет переход из одного состояния в другой, для уже созданного процесса wf

Условия для запуска wf

Через метаданные можно указать, что используются специальные условия для проверк, нужно ли запускать wf. Возможно указать несколько условий.

Для указания условий используются анотации DispatchConditions и Condition.

@WFD\DispatchConditions(
    conditions={
        @WFD\Condition(type="method", handler="testCondition"),
        @WFD\Condition(type="service", handler="httpMethod", params={"allowedHttpMethods":{"GET"}})
    }
)

Анотация DispatchConditions содержит в себе коллекцию Condition.

Описание параметров анотации Condition

Название параметра Обязательный Значение по умолчанию Описание
type Да Определят тип обработчика ("service", "method", "function")
handler Да Определят имя обработчика
params Нет пустой массив Указывает параметры для обработчика

Описание типов обработчиков: service - используется валидатор, должен быть зарегестрирован в стандартром plugin manager'e валидаторов method - используется метода контроллера * function - использутся php функция

Значение имени обработчика в зависимости от его типа

Тип обработчика Описание
service Имя валидатора зарегестрированного в \Zend\Validator\ValidatorPluginManager
method Имя метода контрллера
function Имя php функции