2013-03-26 7 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'); 

しかし、どのように引数を取得できますか?

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

または

あなたは別々のサービスクラスを作成する必要があり、コマンドがContainerAwareCommandを拡張させ、あなたに

答えて

23

簡単な方法をありがとう

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

//services.yml

あなたは

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

コールコマンドクラスからサービスを述べた上記のような

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

は、サービスクラスでは、コンストラクタを作成します。

それはそれです。

理由:あなたはサービスとしてコマンドクラスを作成していますが、ビットコマンドクラスのコンストラクタでは、最初の引数としてコマンド名が必要です。

+2

parameters.ymlのパラメータにアクセスするだけのサービスを作成するのは本当にクリーンです...別の方法がありますが、サービスを使用していますか? – mlwacosmos

+2

もちろんもちろん、$ this-> getContainer() - > getParameter( 'パラメータ名'); – Venu

関連する問題