2013-03-26 126 views
13

我正在添加一个新的命令行。 我想访问我的类中的参数(parameters.yml)的值。命令类的访问参数

我读过,我应该添加这个类作为服务来访问参数。所以

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

据说normaly的说法是该类的构造函数,但如果我这样做:

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

我有一个警告,说第一个参数丢失。在命令母亲班上有一个名字作为构造的独特随后的说法,但即使我写:

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

它不会改变任何东西..

另一种可能性是调用我的类中的服务:

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

但是,我该如何获得参数?

谢谢

回答

23

简单的办法,让命令延长ContainerAwareCommand

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

您应该创建单独的服务类

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

//services.yml

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

在服务类,创建构造像上面你提到

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

呼叫从指令级的服务。

就是这样。

原因:您正在将命令类本身作为服务,位命令类构造器期望命令名称作为第一个参数。

+2

它真的很干净,创建一个服务只是为了有权访问parameters.yml中的参数......也许有另一种方式,但使用服务? – mlwacosmos 2013-03-26 12:31:57

+2

当然是,$ this-> getContainer() - > getParameter('parameter name'); – Venu 2013-03-26 12:32:44