2013-03-26 20 views
13

içinden erişim parametresi Yeni bir komut satırı ekliyorum. Sınıfımdaki bir parametrenin (parameters.yml) değerine erişmek istiyorum.Komut Sınıfı

Bu sınıfı, parametreye erişim için bir hizmet olarak eklemem gerektiğini okudum. Yani

//config.yml

imports: 
- { resource: services.yml } 

//services.yml

services: 
    less_css_compiler: 
    class: MyVendor\MyBundle\Command\ThemeCommand 
    arguments: [%less_compiler%] 

//parameters.yml

parameters: 
    less_compiler:  WinLess.exe 

o normalde argüman içinde olduğu söylenir sınıfın kurucusu ancak bunu yaparsam:

public function __construct($less_compiler) { 
    $this->less_compiler = $less_compiler; 
} 

İlk argümanın eksik olduğunu belirten bir uyarı aldım. Komut anne sınıfında orada yapıcı sonra eşsiz argüman olarak bir isimdir ama ben yazmak halde:

public function __construct($name, $less_compiler) { 
} 

O şey değişmez ..

Diğer olasılık dersime iç hizmet çağırmaktır :

$service = $this->getContainer()->get('less_css_compiler'); 

Ama bu tartışmayı nasıl alabilirim?

$this->getContainer()->getParameter('parameter_name'); 

veya

Sen ayrı hizmet sınıfı oluşturmak gerekir komut ContainerAwareCommand uzatmak izin size

cevap

23

Basit bir şekilde ederiz

$service = $this->getContainer()->get('less_css_compiler'); 

//services.yml

Eğer

public function __construct($less_compiler) { 
    $this->less_compiler = $less_compiler; 
} 

Çağrı komutu sınıfından hizmet yukarıda belirtilen gibi

services: 
    less_css_compiler: 
    class: MyVendor\MyBundle\Service\LessCompiler 
    arguments: [%less_compiler%] 

hizmet sınıfında, yapıcı oluşturun.

Bu şekilde.

Sebep: Komut sınıfını hizmet olarak kullanıyorsunuz, bit komut sınıfı denetleyicisi komutun adını ilk argüman olarak bekliyor.

+2

Gerçekten sadece parameters.yml parametresine erişmek için bir hizmet oluşturmak gerçekten temiz ... belki başka bir yolu var ama bir servis kullanıyor? – mlwacosmos

+2

tabiki evet, $ this-> getContainer() -> getParameter ('parametre adı'); – Venu