2014-12-18 2 views
5

На данный момент я инстанцировании 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? Неизвестно, когда контейнер создан?

+0

Работает ли ваш код? вы видели http://symfony.com/doc/current/components/dependency_injection/factories.html#passing-arguments-to-the-factory-method – smarber

+0

В createChatMessage аргумент, который вы передаете до сих пор, представляет собой массив – smarber

+0

@ smarber Я видел этот пример, но ключ, который я передаю, не определен до того момента, когда я создам экземпляр класса, т. е. без службы. Я не хочу передавать весь контейнер, поэтому завод передается в качестве параметра этой службы ... У нас есть решение, которое, похоже, работает в данный момент, но не кажется правильным, поэтому Я обновлю вопрос, когда я знаю, что он работает правильно. –

ответ

-2

все это есть в документации:

http://symfony.com/doc/current/components/dependency_injection/factories.html#passing-arguments-to-the-factory-method

и относительно параметров на всех:

http://symfony.com/doc/current/components/dependency_injection/parameters.html

поэтому ваш подход кажется правильным, вы можете захотеть, чтобы проверить вас параметра имя.

+1

В примере показано, как передать другую службу в качестве параметра или параметр, определенный в config, параметр, который мне нужно передать, не является определяемый до последней минуты, поэтому я не могу передать его в config. –

+0

Опять же, это все в документах: http://symfony.com/doc/current/components/dependency_injection/parameters.html#parameters-in-configuration- файлы все, что вы можете вставить в paameters.yml в качестве параметра: значение, вы также можете установить в качестве $ container-> setParameter ('parameter', 'value'); –

+6

Нет. Это не в документации. Остановите и прочитайте его вопрос. – Cerad

Смежные вопросы