2014-12-18 16 views
5

benim hizmetlerden biri içinde bir 3. parti sınıfını başlatmasını ediyorum:Parametreleri çalışma zamanında bir fabrika hizmetine nasıl geçiririm? Şu anda

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

Ben bir hizmete dönüştürmek istediğiniz hangi. ApiKey, mesajın gönderildiği yere bağlı olarak çalışma zamanında belirlenir, bu yüzden çalışma zamanında ayarlayabilmem gerekir. Ben kadarıyla hizmet için bu yapılandırma oluşturma gibi var:

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

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

ama nasıl benim parametreyi createChatMessage için geçmek? Konteyner oluşturulduğunda bilinmemektedir?

+0

Kodunuz çalışıyor mu? Eğer createChatMessage içine http://symfony.com/doc/current/components/dependency_injection/factories.html#passing-arguments-to-the-factory-method – smarber

+0

gördük şimdiye kadar geçiyoruz değişken bir dizi – smarber

+0

olduğunu @ smarber Bu örneği gördüm, ama geçmekte olduğum anahtar şu ana kadar dersi hazırladığım zamana kadar, yani hizmet olmadan tanımlanmıyor. Tüm kapsayıcıyı geçmek istemiyorum, bu nedenle fabrika bu servise bir parametre olarak geçirilir ... Şu anda çalışıyor gibi görünen bir çözümümüz var, ancak doğru değil Soruyu düzgün çalıştığını bildiğim zaman ile güncelleyeceğim. (Bütün fikir konteyner zaten başlatıldı ve zaman Alan adı kodunu çalıştırıyorsanız tarafından conifugured olmasıdır gibi) –

cevap

-2

o docs hepsi orada:

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

ve ilgili parametreler hiç:

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

böylece yaklaşımı doğru görünüyor

, size parametre adı kontrol etmek isteyebilirsiniz.

+1

örnek param veya yapılandırmasında tanımladığınız oluyor bir param olarak başka bir hizmeti geçen gösterir, ben geçmesi gerekiyor param olmadığı son dakikaya kadar tanımlanmış yüzden config geçemeyecek –

+0

Yine, docs hepsi. http://symfony.com/doc/current/components/dependency_injection/parameters.html#parameters-in-configuration- Eğer parametre olarak paameters.yml se ne olursa olsun dosyaları : değeri, ayrıca $ Konteynerler> setParameter ('parametresi', 'değer') olarak ayarlayabilirsiniz; O belgelerde değil –

+6

sayılı durdurun ve onun sorusunu okuyun.. – Cerad

İlgili konular