在 Symfony 6.4 中动态添加工作流到服务

问题描述 投票:0回答:1

Symfony 6.4 docs 有关工作流注册表的状态:

请注意,将注册表注入到您的服务中并不是 推荐。

但是,我需要在服务方法中获取特定的工作流程,该方法根据密钥决定使用哪个工作流程。我事先不知道要加载哪个工作流程,因此无法注入特定的工作流程。我怎样才能做到这一点?现在,我注入注册表。我可以以某种方式注入 service_container 并稍后从那里获取它吗?

symfony dependency-injection symfony-workflows
1个回答
0
投票

您可以使用服务定位器来访问每个工作流程。

文档中提到过:

如果您想检索所有工作流程,例如出于文档目的,您可以使用以下标签注入所有服务:

您可以使用这些标签来获得您想要的任何内容:

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,
) {
}
© www.soinside.com 2019 - 2024. All rights reserved.