/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/Workflow/Dumper/StateMachineGraphvizDumper.php
105 строк
3 KB
Nicolas Grekas
[Workflow] Various fixes and hardenings
19 май 2026, 14:46
19 май 2026, 14:46
a2f435b
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Workflow\Dumper; use Symfony\Component\Workflow\Definition; use Symfony\Component\Workflow\Marking; class StateMachineGraphvizDumper extends GraphvizDumper { /** * Dumps the workflow as a graphviz graph. * * Available options: * * * graph: The default options for the whole graph * * node: The default options for nodes (places) * * edge: The default options for edges */ public function dump(Definition $definition, ?Marking $marking = null, array $options = []): string { $withMetadata = $options['with-metadata'] ?? false; $places = $this->findPlaces($definition, $withMetadata, $marking); $edges = $this->findEdges($definition); $options = array_replace_recursive(self::$defaultOptions, $options); $label = $this->formatLabel($definition, $withMetadata, $options); return $this->startDot($options, $label) .$this->addPlaces($places) .$this->addEdges($edges) .$this->endDot(); } /** * @internal */ protected function findEdges(Definition $definition): array { $workflowMetadata = $definition->getMetadataStore(); $edges = []; foreach ($definition->getTransitions() as $transition) { $attributes = []; $transitionName = $workflowMetadata->getMetadata('label', $transition) ?? $transition->getName(); $labelColor = $workflowMetadata->getMetadata('color', $transition); if (null !== $labelColor) { $attributes['fontcolor'] = $labelColor; } $arrowColor = $workflowMetadata->getMetadata('arrow_color', $transition); if (null !== $arrowColor) { $attributes['color'] = $arrowColor; } foreach ($transition->getFroms(true) as $fromArc) { foreach ($transition->getTos(true) as $toArc) { $edge = [ 'name' => $transitionName, 'to' => $toArc->place, 'attributes' => $attributes, ]; $edges[$fromArc->place][] = $edge; } } } return $edges; } /** * @internal */ protected function addEdges(array $edges): string { $code = ''; foreach ($edges as $id => $edges) { foreach ($edges as $edge) { $code .= \sprintf( " place_%s -> place_%s [label=\"%s\" style=\"%s\"%s];\n", $this->dotize($id), $this->dotize($edge['to']), $this->escape($edge['name']), 'solid', $this->addAttributes($edge['attributes']) ); } } return $code; } }