1

アプリケーション全体からログファイルにさまざまなデバッグメッセージを記録するためのロガークラス(Application \ Debug \ Logger)があります。そして、単純なエイリアス「logger」を使用してそのクラスのインスタンスを取得したいと思います。そこで、Zend \ Di \ Diを構成して、たとえば、モジュールコントローラーや別のアプリケーションコンポーネントで次のようなことを実行できるようにします。

$di = new \Zend\Di\Di();
$logger = $di->get('logger');
//$logger should be Application\Debug\Logger instance...

これを実現するために、Application / config/module.config.phpにこれがあります。

'di' => array(
    'instance' => array(
        'alias' => array(
            'logger' => 'Application\Debug\Logger',
        ),
    ),
)

しかし、問題は次のとおりです。エイリアス「ロガー」が機能しません。Diを使用して、フルネーム(Application \ Debug \ Logger)でクラスを取得できますが、エイリアスでは取得できません(エラーが発生します:クラスロガーが提供された定義に見つかりませんでした)。どういうわけか、設定をDiに渡す必要があると思いますが、方法がわかりません。手伝って頂けますか?

4

1 に答える 1

0

問題の部分的な解決策を見つけました。ServiceManager を呼び出すと、適切なクラスを見つけるために依存性注入構成も使用されることに気付きました。次のように呼び出すことができます。

$logger = $this->getServiceLocator()->get('logger');

コントローラーで、DI 用に構成されたエイリアスでロガー インスタンスを取得します。

したがって、構成ファイルに次のように入れることもできます。

'service_manager' => array(
    'invokables' => array(
        'logger' => 'Application\Debug\Logger',
    )
), 

前の di config の例と同じように機能します。でもDIの使い方がいまいちよくわからないので、どなたか教えていただけると助かります。

于 2012-12-18T09:46:25.427 に答える