You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:22:34