Артём Дехтярь
Павел Степанец
m@artemd.ru
pahhan.ne@gmail.com
https://symfony-bro.com/
5+ лет коммерческой разработки
DDD, pure OOP, react paradigm
Архитектура корпоративных проектов
PHP, Java, C#
Symfony, Yii2
Миграция и аудит legacy-проектов
Управление заявками - GERP
Была смигрирована из этого
В Symfony!
Требования
Дата время
Текст
Файлы
Сложные формы
для бандлов
Transition guard
для передачи дополнительных данных при смене состояния
для сборки workflow сервисов из конфигурации бандла
FrameworkExtension::registerWorkflowConfiguration
для контроля доступа
Expression Language and
Workflow guard events
от League of Extraordinary packages
http://tactician.thephpleague.com/
public function execute($command, callable $next)
{
//...
$result = $next($command);
//...
try {
$workflow = $this->registry->get($task, $workflowName);
$workflow->apply($task, $command->getTransition());
} catch (Exception $exception) {
throw new TaskException( /* ... */ );
}
}
SymfonyBro\TaskBundle\Form\TransitionType
"Радио батоны" - это доступные для перехода состояния из workflow для данного субьекта
Gorserv/Gerp/TaskServiceBundle/Resources/config/workflow.yml
transitions:
delay:
from: new
to: delayed
guard: 'is_granted(["ROLE_DISPATCHER"])'
dispatch:
from: new
to: scheduled
guard: 'is_granted(["ROLE_DISPATCHER"])'
to_work:
from: scheduled
to: in_work
guard: 'is_granted(["ROLE_TECH"])'
строит роли из workflow и инжектит их в контейнер
это позволяет строить безопасность на основе формальной модели, например HRU
workflow
cancel:
from: new
to: canceled
to_agreement:
from: new
to: wait_agreement
dispatch:
from: new
to: scheduled
security.role_hierarchy.roles
ROLE_SERVICE_TRANSITION_CANCEL:
ROLE_SERVICE_TRANSITION_TO_AGREEMENT:
ROLE_SERVICE_TRANSITION_DISPATCH:
https://goo.gl/AtAwso