yokai/sonata-workflow
Composer 安装命令:
composer require yokai/sonata-workflow
包简介
Integrate Symfony workflow component in Sonata Admin
README 文档
README
Introduction
This library add Symfony Workflow component integration within Sonata Admin.
Features
- add a menu dropdown to your admin detail pages on which you have buttons to apply available transitions
- ship a controller to apply transition
- allow to hook into the apply transition process to show an intermediate page
Code
- a Sonata Admin Extension : WorkflowExtension
- a Controller trait : WorkflowControllerTrait
- a Controller : WorkflowController
Installation
$ composer require yokai/sonata-workflow
Configuration
Let say that you have an entity named PullRequest that is under workflow and for which you have an admin.
# config/packages/workflow.yml framework: workflows: pull_request: type: state_machine marking_store: type: state_machine property: status supports: - App\Entity\PullRequest places: - opened - pending_review - merged - closed initial_marking: - opened transitions: start_review: from: opened to: pending_review merge: from: pending_review to: merged close: from: pending_review to: closed
One extension for everything
The extension is usable for many entities and with no configuration.
You only need to create a service for it, configure the controller that will handle the transition action and configure on which admin you want it available.
For instance :
# config/packages/sonata_admin.yml services: admin.pull_request: class: App\Admin\PullRequestAdmin public: true arguments: [~, App\Entity\PullRequest, Yokai\SonataWorkflow\Controller\WorkflowController] tags: - { name: 'sonata.admin', manager_type: orm, label: PullRequest } admin.extension.workflow: class: Yokai\SonataWorkflow\Admin\Extension\WorkflowExtension public: true arguments: - '@workflow.registry' Yokai\SonataWorkflow\Controller\WorkflowController: autowire: true tags: ['controller.service_arguments'] sonata_admin: extensions: admin.extension.workflow: admins: - admin.pull_request
note: You may noticed that we also registered the controller
Yokai\SonataWorkflow\Controller\WorkflowControlleras a service. It is important, because it needs the workflow registry service to work.
More specific extension per admin
But the extension accepts many options if you wish to customize the behavior.
For instance :
# config/packages/sonata_admin.yml services: admin.pull_request: class: App\Admin\PullRequestAdmin public: true arguments: [~, App\Entity\PullRequest, 'Yokai\SonataWorkflow\Controller\WorkflowController'] tags: - { name: 'sonata.admin', manager_type: orm, label: PullRequest } admin.extension.pull_request_workflow: class: Yokai\SonataWorkflow\Admin\Extension\WorkflowExtension public: true arguments: - '@workflow.registry' - render_actions: [show] workflow_name: pull_request no_transition_label: No transition for pull request no_transition_icon: fa fa-times dropdown_transitions_label: Pull request transitions dropdown_transitions_icon: fa fa-archive transitions_default_icon: fa fa-step-forward transitions_icons: start_review: fa fa-search merge: fa fa-check close: fa fa-times Yokai\SonataWorkflow\Controller\WorkflowController: autowire: true tags: ['controller.service_arguments'] sonata_admin: extensions: admin.extension.pull_request_workflow: admins: - admin.pull_request
What are these options ?
render_actions: Admin action names on which the extension should render its menu (defaults to[show, edit])workflow_name: The name of the Workflow to handle (defaults tonull)no_transition_display: Whether or not to display a button when no transition is enabled (defaults tofalse)no_transition_label: The button label when no transition is enabled (defaults toworkflow_transitions_empty)no_transition_icon: The button icon when no transition is enabled (defaults tofa fa-code-fork)dropdown_transitions_label: The dropdown button label when there is transitions enabled (defaults toworkflow_transitions)dropdown_transitions_icon: The dropdown button icon when there is transitions enabled (defaults tofa fa-code-fork)transitions_default_icon: The default transition icon for all transition (defaults tonull: no icon)transitions_icons: A hash with transition name as key and icon as value (defaults to[])
Hook into the transition process
Let say that when you start a review for a pull request, as a user, you will be asked to enter which users are involved in the review.
To achieve this, you will be asked to fill a dedicated form.
You only need to create a custom controller for your entity admin :
# config/packages/sonata_admin.yml services: admin.pull_request: class: App\Admin\PullRequestAdmin public: true arguments: [~, App\Entity\PullRequest, App\Admin\Controller\PullRequestController] tags: - { name: 'sonata.admin', manager_type: orm, label: PullRequest }
<?php // src/Admin/Controller/PullRequestController.php declare(strict_types=1); namespace App\Admin\Controller; use App\Entity\PullRequest; use App\Form\PullRequest\StartReviewType; use Sonata\AdminBundle\Controller\CRUDController; use Symfony\Component\HttpFoundation\Response; use Yokai\SonataWorkflow\Controller\WorkflowControllerTrait; class PullRequestController extends CRUDController { use WorkflowControllerTrait; protected function preApplyTransition(object $object, string $transition): ?Response { switch ($transition) { case 'start_review': return $this->startReview($object, $transition); } return null; } protected function startReview(PullRequest $object, string $transition): ?Response { $form = $this->createForm( StartReviewType::class, [], [ 'action' => $this->admin->generateObjectUrl( 'workflow_apply_transition', $object, ['transition' => $transition] ), ] ); $form->handleRequest($this->getRequest()); if (!$form->isSubmitted() || !$form->isValid()) { $formView = $form->createView(); return $this->renderWithExtraParams('admin/pull-request/start-review.html.twig', [ 'action' => 'edit', 'form' => $formView, 'object' => $object, 'objectId' => $this->admin->getNormalizedIdentifier($object), ], null); } $data = $form->getData(); // do something with the submitted data before returning null to continue applying transition return null; } }
MIT License
License can be found here.
Authors
The library was originally created by Yann Eugoné. See the list of contributors.
Thank's to Prestaconcept for supporting this library.
yokai/sonata-workflow 适用场景与选型建议
yokai/sonata-workflow 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 391.42k 次下载、GitHub Stars 达 23, 最近一次更新时间为 2018 年 03 月 23 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「admin」 「sonata」 「workflow」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 yokai/sonata-workflow 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 yokai/sonata-workflow 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 yokai/sonata-workflow 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Workflow for NetCommons Plugin
Sonata Extra admin features
ACL list filtering for SonataAdmin
2lenet/EasyAdminPlusBundle
Workflow logger
Analysis module for finding problematical shop data.
统计信息
- 总下载量: 391.42k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 23
- 点击次数: 26
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-03-23