0

私は2.0.4を使用しています。

私のファイル:

https://gist.github.com/4191490

http://framework.zend.com/manual/2.0/en/modules/zend.service-manager.quick-start.htmlのドキュメントによると

クラスがServiceManagerAwareInterfaceを実装している場合、そのオブジェクトはサービスマネージャーで初期化されます。私も同じことをしました(ソースコードのBaseEntity.phpを参照してください)。ただし、サービスマネージャは初期化されていないため、サブクラスSnippetからは使用できません。

質問:他のサービスにアクセスできるように、グローバルまたはモジュールのServireManagerインスタンスを取得するにはどうすればよいですか?(それらのほとんどはシングルトンです)

4

2 に答える 2

1

提案どおりに機能するにはServiceManagerAwareInterface、インスタンスがから出てくる必要がありますServiceManager。これは、ServiceManagerそのインターフェイスが見つかった場合にServiceManagerを挿入するInitalizerが接続されているためです(これは-で確認できますZend\Mvc\Service\ServiceManagerConfig)。

クラスをSevriceManager構成に追加してから、$smインスタンスを介してそれらをプルするか、getTableGatewayを変更して以下を追加することもできます。

if ($prototype instanceof ServiceManagerAwareInterface)
{
    $prototype->setServiceManager($sm);
}
于 2012-12-03T10:21:13.857 に答える
1

ServiceManagerAwareInterface非推奨であり、代わりにoutoinjected
使用ではありませんServiceLocatorAwareInterface

于 2012-12-03T10:14:36.450 に答える