Symfony Workflow组件Mermaid导出器处理含空格Place时生成无效图
Symfony Workflow Mermaid Dumper 处理含空格的Place名称问题
Symfony Workflow Component v5.4.21的默认Mermaid dumper在处理名称含空格的place时,会生成不符合Mermaid语法的节点ID(Mermaid节点ID不允许包含空格),导致流程图无法正常渲染。
问题原因
默认dumper生成节点ID时直接复用了place的原始名称,当名称包含空格时,生成的节点ID(如Step 10)违反Mermaid语法规则,触发渲染报错。
解决方案:自定义Mermaid Dumper
通过继承默认的MermaidDumper并重写生成节点ID的方法,将空格替换为下划线等合法字符,确保节点ID符合语法要求,同时保留place的原始显示名称不变。
创建自定义Dumper类:
use Symfony\Component\Workflow\Dumper\MermaidDumper; class CustomMermaidDumper extends MermaidDumper { protected function getNodeId(string $place): string { // 将空格替换为下划线,生成合法的节点ID return str_replace(' ', '_', parent::getNodeId($place)); } }
使用自定义Dumper生成流程图:
// 假设已通过容器获取工作流实例 $workflow = $this->get('workflow.your_workflow_identifier'); $dumper = new CustomMermaidDumper(); $validMermaidCode = $dumper->dump($workflow->getDefinition());
效果验证
生成的Mermaid代码会将节点ID中的空格替换为下划线,示例如下:
graph LR Step_10(["Step 1"]) Step_21(("Step 2")) Step_32(("Step 3")) Step_10-->|"Goto Step2"|Step_21 Step_21-->|"Goto Step3"|Step_32
这段代码可在mermaid.live正常渲染,同时保留了place的原始显示名称。
补充说明
Symfony 5.4系列的Workflow组件目前没有内置配置项处理该问题,自定义dumper是最简洁可靠的解决方式。若后续版本修复此问题,可直接切换回默认dumper。
内容的提问来源于stack exchange,提问作者ITriedReadingTheManual
相关产品推荐
相关产品推荐

