ログ日記

作業ログと日記とメモ

'Invalid instantiator of type "NULL" for "Zend\\ServiceManager\\ServiceLocatorInterface".

Zend\ValidatorPluginManager や Zend\Filter\FilterPluginManager などの PluginManager系をDIで取ろうとするとエラーになる。


同じ問題をやっている方が居た。
http://d.hatena.ne.jp/noopable/20130304
ここを詳しく読む前にやったので、全然別の方向から。


http://framework.zend.com/manual/2.1/en/modules/zend.di.instance-manager.html

  • $di->instanceManager()->addTypePreference('interface', 'realClass') でインターフェースのデフォルト実装を指定する
  • $introspectionStrategy->setInterfaceInjectionInclusionPatterns(array()) でAwareインターフェースがあればインジェクションというルールを削除する


new Zend\Di()して使い捨てる感じなら 一番目が楽。
Diを全体で使っていて、Awareインターフェース無視していいよっていうなら二番目が楽。


自分の場合はDiもDefinitionも拡張して全体で使っているので、setInterfaceInjectionInclusionPatterns(array())しておいた。
ちなみにIntrospectionStrategyはDefinitionのコンストラクタ引数で、DefinitionはDefinitionListのコンストラクタ引数で、DefinitionListはDiのコンストラクタ引数なので三階層潜らないといけない。