2013-03-26 10 views
13

Aggiungo una nuova riga di comando. Mi piacerebbe avere accesso al valore di un parametro (parameters.yml) nella mia classe.Parametro di accesso dalla classe di comando

Ho letto che dovrei aggiungere questa classe come servizio per avere accesso al parametro. Così

//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 

si dice che normalmente l'argomento è in il costruttore della classe, ma se faccio questo:

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

Ho un avvertimento che dice che manca il primo argomento. Nella classe madre di comando c'è un nome come argomento allora unico del costruttore, ma anche se scrivo:

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

Non cambia nulla ..

Altra possibilità è quella di chiamare il servizio all'interno della mia classe :

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

Ma come si ottiene l'argomento?

Grazie

risposta

23

modo semplice, lascia il comando estendere ContainerAwareCommand

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

o

Si dovrebbe creare classe di servizio separato

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

//services.yml

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

In classe di servizio, creare costruttore come sopra lei ha citato

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

chiamare il servizio dalla classe di comando.

Questo è tutto.

Motivo: Si sta creando la classe di comando stessa come servizio, il contructor di classe di comando bit prevede il nome del comando come primo argomento.

+2

è veramente pulito per creare un servizio solo per avere accesso a un parametro in parameters.yml ... forse c'è un altro modo allora ma usando un servizio? – mlwacosmos

+2

ovviamente sì, $ this-> getContainer() -> getParameter ('nome parametro'); – Venu

Problemi correlati