@@ -406,20 +406,32 @@ private function registerWorkflowConfiguration(array $workflows, ContainerBuilde
406406 foreach ($ workflows as $ name => $ workflow ) {
407407 $ type = $ workflow ['type ' ];
408408
409- $ definitionDefinition = new Definition (Workflow \Definition::class);
410- $ definitionDefinition ->addMethodCall ('addPlaces ' , array ($ workflow ['places ' ]));
409+ // Create a DefinitionBuilder
410+ $ definitionBuilderDefinition = new Definition (Workflow \DefinitionBuilder::class);
411+ $ definitionBuilderDefinition ->addMethodCall ('addPlaces ' , array ($ workflow ['places ' ]));
411412 foreach ($ workflow ['transitions ' ] as $ transitionName => $ transition ) {
412413 if ($ type === 'workflow ' ) {
413- $ definitionDefinition ->addMethodCall ('addTransition ' , array (new Definition (Workflow \Transition::class, array ($ transitionName , $ transition ['from ' ], $ transition ['to ' ]))));
414+ $ definitionBuilderDefinition ->addMethodCall ('addTransition ' , array (new Definition (Workflow \Transition::class, array ($ transitionName , $ transition ['from ' ], $ transition ['to ' ]))));
414415 } elseif ($ type === 'state_machine ' ) {
415416 foreach ($ transition ['from ' ] as $ from ) {
416417 foreach ($ transition ['to ' ] as $ to ) {
417- $ definitionDefinition ->addMethodCall ('addTransition ' , array (new Definition (Workflow \Transition::class, array ($ transitionName , $ from , $ to ))));
418+ $ definitionBuilderDefinition ->addMethodCall ('addTransition ' , array (new Definition (Workflow \Transition::class, array ($ transitionName , $ from , $ to ))));
418419 }
419420 }
420421 }
421422 }
422423
424+ // Create a Definition
425+ $ definitionDefinition = new Definition (Workflow \Definition::class);
426+ $ definitionDefinition ->setPublic (false );
427+ $ definitionDefinition ->setFactory (array ($ definitionBuilderDefinition , 'build ' ));
428+ $ definitionDefinition ->addTag ('workflow.definition ' , array (
429+ 'name ' => $ name ,
430+ 'type ' => $ type ,
431+ 'marking_store ' => isset ($ workflow ['marking_store ' ]['type ' ]) ? $ workflow ['marking_store ' ]['type ' ] : null ,
432+ ));
433+
434+ // Create MarkingStore
423435 if (isset ($ workflow ['marking_store ' ]['type ' ])) {
424436 $ markingStoreDefinition = new DefinitionDecorator ('workflow.marking_store. ' .$ workflow ['marking_store ' ]['type ' ]);
425437 foreach ($ workflow ['marking_store ' ]['arguments ' ] as $ argument ) {
@@ -429,25 +441,20 @@ private function registerWorkflowConfiguration(array $workflows, ContainerBuilde
429441 $ markingStoreDefinition = new Reference ($ workflow ['marking_store ' ]['service ' ]);
430442 }
431443
432- $ definitionDefinition ->addTag ('workflow.definition ' , array (
433- 'name ' => $ name ,
434- 'type ' => $ type ,
435- 'marking_store ' => isset ($ workflow ['marking_store ' ]['type ' ]) ? $ workflow ['marking_store ' ]['type ' ] : null ,
436- ));
437- $ definitionDefinition ->setPublic (false );
438-
444+ // Create Workflow
439445 $ workflowDefinition = new DefinitionDecorator (sprintf ('%s.abstract ' , $ type ));
440446 $ workflowDefinition ->replaceArgument (0 , $ definitionDefinition );
441447 if (isset ($ markingStoreDefinition )) {
442448 $ workflowDefinition ->replaceArgument (1 , $ markingStoreDefinition );
443449 }
444450 $ workflowDefinition ->replaceArgument (3 , $ name );
445451
452+ // Store to container
446453 $ workflowId = sprintf ('%s.%s ' , $ type , $ name );
447-
448- $ container ->setDefinition (sprintf ('%s.definition ' , $ workflowId ), $ definitionDefinition );
449454 $ container ->setDefinition ($ workflowId , $ workflowDefinition );
455+ $ container ->setDefinition (sprintf ('%s.definition ' , $ workflowId ), $ definitionDefinition );
450456
457+ // Add workflow to Registry
451458 foreach ($ workflow ['supports ' ] as $ supportedClass ) {
452459 $ registryDefinition ->addMethodCall ('add ' , array (new Reference ($ workflowId ), $ supportedClass ));
453460 }
0 commit comments