На данный момент я инстанцировании 3-го класса партии в одном из моих услуг:Как передать параметры заводской службе во время выполнения?
$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? Неизвестно, когда контейнер создан?
Работает ли ваш код? вы видели http://symfony.com/doc/current/components/dependency_injection/factories.html#passing-arguments-to-the-factory-method – smarber
В createChatMessage аргумент, который вы передаете до сих пор, представляет собой массив – smarber
@ smarber Я видел этот пример, но ключ, который я передаю, не определен до того момента, когда я создам экземпляр класса, т. е. без службы. Я не хочу передавать весь контейнер, поэтому завод передается в качестве параметра этой службы ... У нас есть решение, которое, похоже, работает в данный момент, но не кажется правильным, поэтому Я обновлю вопрос, когда я знаю, что он работает правильно. –