有关工作流注册表的symfony 6.4 docs状态:
请注意,将注册表注入您的服务并不是 推荐的.
但是,我需要在一个服务方法中获取一个特定的工作流,该服务方法根据一个键来决定使用哪个工作流.我事先不知道要加载哪个工作流,因此无法注入特定的工作流.我怎么能这样做呢?目前,我注入注册表.我可以以某种方式注入服务容器并稍后从那里获取它吗?
有关工作流注册表的symfony 6.4 docs状态:
请注意,将注册表注入您的服务并不是 推荐的.
但是,我需要在一个服务方法中获取一个特定的工作流,该服务方法根据一个键来决定使用哪个工作流.我事先不知道要加载哪个工作流,因此无法注入特定的工作流.我怎么能这样做呢?目前,我注入注册表.我可以以某种方式注入服务容器并稍后从那里获取它吗?
您可以使用服务定位器访问每个工作流.
它在documentation中提到:
如果要检索所有工作流,例如出于文档目的,您可以使用以下标记注入所有服务:
workflow: all workflows and all state machine;
workflow.workflow: all workflows;
workflow.state_machine: all state machines.
使用symfony 6/7可以使用Locator属性轻松完成此操作:
public function __construct(
#[TaggedLocator('workflow')] private ContainerInterface $workflowsAndStateMachinesLocator,
#[TaggedLocator('workflow.workflow')] private ContainerInterface $workflowsLocator,
#[TaggedLocator('workflow.state_machine')] private ContainerInterface $stateMachinesLocator,
) {
}