2014-12-18 10 views
5

W tej chwili mam instancji 3rd klasę partii wewnątrz jednego z moich usług:Jak przekazać parametry do serwisu fabrycznego w czasie wykonywania?

$message = new ChatMessage($apiKey); 
$message->setFrom($fromUser); 
$message->setBody($messageText); 
$message->etc ... 

którego chcę, aby włączyć do eksploatacji. Klucz apiKey jest określany w czasie wykonywania w zależności od miejsca, w którym wysyłana jest wiadomość, więc muszę mieć możliwość ustawienia go w czasie wykonywania. Mam aż do utworzenia tego config dla usługi:

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

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

, ale jak przekazać mój parametr do createChatMessage? Nie wiadomo, kiedy kontener zostanie utworzony?

+0

Czy Twój kod działa? czy widziałeś http://symfony.com/doc/current/components/dependency_injection/factories.html#passing-arguments-to-the-factory-method – smarber

+0

Do createChatMessage argument, który przechodzisz do tej pory, jest tablicą – smarber

+0

@ smarber Widziałem ten przykład, ale klucz, przez który przechodzę, nie jest zdefiniowany aż do momentu, w którym natychmiast utworzę klasę, czyli bez usługi. Nie chcę przekazać całego kontenera, więc fabryka jest przekazywana jako parametr do tej usługi ... Mamy rozwiązanie, które wydaje się działać w tej chwili, ale nie jest w porządku, więc Uaktualnię to pytanie, gdy wiem, że działa poprawnie. –

Odpowiedz

-2

to wszystko jest tam w docs:

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

i dotyczące parametrów na wszystkich:

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

więc podejście wydaje się prawidłowe, może chcesz sprawdzić ci parametru nazwa.

+1

Przykład pokazuje przekazanie innej usługi jako paramu lub param zdefiniowanego w config, parametr, który muszę przekazać, nie jest zdefiniowane do ostatniej minuty, więc nie mogę przekazać go w konfiguracji. –

+0

Ponownie, wszystko to jest w dokumentach: http://symfony.com/doc/current/components/dependency_injection/parameters.html#parameters-in-configuration- pliki cokolwiek możesz zobaczyć w paameters.yml jako parametr: value, możesz również ustawić jako $ container-> setParameter ('parameter', 'value'); –

+6

Nie. Nie ma go w dokumentacji. Zatrzymaj i przeczytaj jego pytanie. – Cerad

Powiązane problemy