2013-03-26 161 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