@@ -406,20 +406,32 @@ private function registerWorkflowConfiguration(array $workflows, ContainerBuilde
406
406
foreach ($ workflows as $ name => $ workflow ) {
407
407
$ type = $ workflow ['type ' ];
408
408
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 ' ]));
411
412
foreach ($ workflow ['transitions ' ] as $ transitionName => $ transition ) {
412
413
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 ' ]))));
414
415
} elseif ($ type === 'state_machine ' ) {
415
416
foreach ($ transition ['from ' ] as $ from ) {
416
417
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 ))));
418
419
}
419
420
}
420
421
}
421
422
}
422
423
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
423
435
if (isset ($ workflow ['marking_store ' ]['type ' ])) {
424
436
$ markingStoreDefinition = new DefinitionDecorator ('workflow.marking_store. ' .$ workflow ['marking_store ' ]['type ' ]);
425
437
foreach ($ workflow ['marking_store ' ]['arguments ' ] as $ argument ) {
@@ -429,25 +441,20 @@ private function registerWorkflowConfiguration(array $workflows, ContainerBuilde
429
441
$ markingStoreDefinition = new Reference ($ workflow ['marking_store ' ]['service ' ]);
430
442
}
431
443
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
439
445
$ workflowDefinition = new DefinitionDecorator (sprintf ('%s.abstract ' , $ type ));
440
446
$ workflowDefinition ->replaceArgument (0 , $ definitionDefinition );
441
447
if (isset ($ markingStoreDefinition )) {
442
448
$ workflowDefinition ->replaceArgument (1 , $ markingStoreDefinition );
443
449
}
444
450
$ workflowDefinition ->replaceArgument (3 , $ name );
445
451
452
+ // Store to container
446
453
$ workflowId = sprintf ('%s.%s ' , $ type , $ name );
447
-
448
- $ container ->setDefinition (sprintf ('%s.definition ' , $ workflowId ), $ definitionDefinition );
449
454
$ container ->setDefinition ($ workflowId , $ workflowDefinition );
455
+ $ container ->setDefinition (sprintf ('%s.definition ' , $ workflowId ), $ definitionDefinition );
450
456
457
+ // Add workflow to Registry
451
458
foreach ($ workflow ['supports ' ] as $ supportedClass ) {
452
459
$ registryDefinition ->addMethodCall ('add ' , array (new Reference ($ workflowId ), $ supportedClass ));
453
460
}
0 commit comments