Symfony 如何在运行时将参数传递给factory服务?

Symfony 如何在运行时将参数传递给factory服务?,symfony,Symfony,目前,我正在我的一个服务中实例化一个第三方类: $message = new ChatMessage($apiKey); $message->setFrom($fromUser); $message->setBody($messageText); $message->etc ... 我想把它变成一种服务。apiKey是在运行时根据消息的发送位置确定的,因此我需要能够在运行时设置它。我已经为该服务创建了以下配置: class ChatMessageFactory { f

目前,我正在我的一个服务中实例化一个第三方类:

$message = new ChatMessage($apiKey);
$message->setFrom($fromUser);
$message->setBody($messageText);
$message->etc ...
我想把它变成一种服务。apiKey是在运行时根据消息的发送位置确定的,因此我需要能够在运行时设置它。我已经为该服务创建了以下配置:

class ChatMessageFactory
{
    function createChatMessage($apiKey) {
        return new ChatMessage($apiKey);
    }
}

services.yml:-
services:
    chatmessage_manager:
        class: ChatMessage
        factory: [ChatMessageFactory, createChatMessage]
        arguments: ["%flow.apiKey%"]

但是如何将参数传递给createChatMessage?不知道什么时候创建容器?

都在文档中:

关于所有参数:


因此,您的方法似乎是正确的,您可能需要检查您的参数名称。

您的代码有效吗?你看到createChatMessage了吗?到目前为止,你传递的论点是array@smarber我已经看过这个例子,但是我要传递的密钥直到我现在实例化这个类之前才被定义,即没有服务。我不想传递整个容器,所以工厂作为参数传递给这个服务。。。我们有一个解决方案,目前似乎可以工作,但感觉不对,所以当我知道它工作正常时,我会更新这个问题。我想这似乎不可能在运行时为服务设置配置(因为整个想法是,在您运行域代码时,容器已经初始化和配置)。因此,我将factory作为服务公开,并使用
$factory->createChat($api)
创建聊天消息。聊天实例在容器中不可用,但我不在乎。如果我真的需要所有实例化的聊天,我会创建服务
ChatRegistry
,它将枚举所有创建的聊天。(或者只需在工厂
$factory->getChats()上使用方法)
返回图表的数组或映射。该示例显示将另一个服务作为参数传递,或者作为配置中定义的参数传递,我需要传递的参数直到最后一分钟才定义,因此我无法在配置中传递它。同样,它都在文档中:无论您在paameters.yml中作为参数使用什么:value,您也可以设置为$container->setParameter('parameter','value');不。它不在文档中。停下来读他的问题。事实上,他可以在容器内设置参数,并在工厂服务中获取它,或者随时将其设置为工厂服务本身的字段。不想拖得太远,但他想做的是$service=$container->get('factory',$apiKey)。他想传递一个请求驱动的参数,该参数在生成容器时不可用。当然不起作用。他需要执行:$service=$container->get('factory')->create($apiKey);并相应地调整他的工厂代码。