2017-02-28 33 views
2

私はparameters.ymlからpareameterを読んでいます。 ソリューションは、コントローラを拡張することですが、私はこのエラーを得た:Symfony:コントローラの外部からparameter.ymlを読み込みます。

Error: Call to a member function getParameter() on null 

私はコンテナがnullであることを知っているが、私はコンテナを取得する方法がわかりませんか?

class Configuration extends Controller 
{ 
    public function __construct() 
    { 
    $this->tempFolderPath = sys_get_temp_dir(); 
    $parameter = $this->container->getParameter('a'); 
    } 
} 

どんな助け?

+0

http://symfony.com/doc/current/service_container.htmlあなたはANS速い助けを – Shefali

答えて

5

Controllerを呼び出すクラスでは、Containerがこのようなクラスに注入されているので、$this->container->getParameter('a')を呼び出すことができます。あなたが他のクラスにいるときは、あなたが望むパラメータをdefining your class as a serviceで注入する必要があります。

あなたのサービスの定義は、以下のようになります。

services: 
    class: App\Your\FooClass 
    arguments: 
     - %a% 

% - それはパラメータ

を注入する特殊文字です次に、あなたのクラスは次のようになります。

class FooClass 
{ 
    protected $a; 

    public function __construct($a) 
    { 
     $this->a = $a; 
     //you have your "a" parameter value injected into constructor 
    } 
} 
+0

感謝を見つけるだろう、このドキュメントを読んで、しかし、私はこのクラスをインスタンス化するこのクラスの静的mmethodを持っています。 public static function getDefaultConfiguration() { if(self :: $ defaultConfiguration === null){ self :: $ defaultConfiguration = newコンフィギュレーション(); } return self :: $ defaultConfiguration; } –

+1

その理由は静的メソッドが悪いです:私は静的メソッドを使用して終了することをお勧めします。そうでなければ、あなたは手動で 'parameters.yml'を解析し、パラメータ値を抽出しようとしますが、これは非常にエレガントではありません。 –

+0

残念ながら、私は助けてくれてありがとう! –

0

これはですベストプラクティスではありません。のソリューション :(私のコードでは、ホールクラスをインスタンス化する静的メソッドがあるためです。 解決策になります。

public function __construct() 
{ 
    $this->tempFolderPath = sys_get_temp_dir(); 
    global $kernel; 
    $this->host = $kernel->getContainer()->getParameter('ws_host'); 
} 
関連する問題