2016-03-28 2 views
2

を返して:

class MyController extends Controller 
{ 
    private $service; 
    public function __construct() { 
     $this->service = $this->container->get("service"); 
    } 
} 

が、コンテナはnullで、例外がスローされます:

私はそれを行うことができますどのように
Error: Call to a member function get() on null 

作品ですか? ps:コントローラをサービスにしたいとは思わない。方法setContainerがまだ呼び出されていないので、あなたは、コンストラクタからサービスコンテナにアクセスすることはできません

答えて

3

EDIT

コントローラの別の方法で同じものを呼び出しても機能します。

+0

この回答は間違っています。 エラーメッセージはnullでget()を呼び出し、コードは$ this-> container-> get()です。したがって、$ this-> containerプロパティはnullです。これは$ thisの関数呼び出しではありません。以下の答えは正しいです。コンテナは後でセッタ注入によって設定されるため、コンストリクタではコンテナプロパティはnullで、まだ設定されていません。 – Andras

+1

回答が更新されました。 – chalasr

2

受け入れられた答えにも拡張してください。

サービスクラスがインスタンス化されると、まずコンストラクタが呼び出されます。カーネル/サービスコンテナは、オブジェクトがContainerAwareのインスタンスであるかどうかをチェックし、次にメソッドsetContainerを呼び出します。 $containerパラメーターはコンストラクターで使用できません。

コンストラクタのように1回の初期化を行う場合は、メソッドsetContainerをオーバーライドしてコンテナ固有の初期化を行います。

関連する問題