Symfony 6.4 docs 有关工作流注册表的状态:
请注意,将注册表注入到您的服务中并不是 推荐。
但是,我需要在服务方法中获取特定的工作流程,该方法根据密钥决定使用哪个工作流程。我事先不知道要加载哪个工作流程,因此无法注入特定的工作流程。我怎样才能做到这一点?现在,我注入注册表。我可以以某种方式注入 service_container 并稍后从那里获取它吗?
您可以使用服务定位器来访问每个工作流程。
在文档中提到过:
如果您想检索所有工作流程,例如出于文档目的,您可以使用以下标签注入所有服务:
您可以使用这些标签来获得您想要的任何内容:
workflow: all workflows and all state machine;
workflow.workflow: all workflows;
workflow.state_machine: all state machines.
可以使用 Symfony 6/7 使用定位器属性轻松完成此操作:
public function __construct(
// creates a service locator with all the services tagged with 'app.handler'
#[TaggedLocator('workflow')] private ContainerInterface $workflowsAndStateMachinesLocator,
#[TaggedLocator('workflow.workflow')] private ContainerInterface $workflowsLocator,
#[TaggedLocator('workflow.state_machine')] private ContainerInterface $stateMachinesLocator,
) {
}