これを掘り下げたところ、実際に例外がスローされました。以下を実行してみてください:
$def = new \Zend\Di\Definition\RuntimeDefinition();
var_dump($def->getMethods('Zend\Form\Form'));
Zend\Di
これにより、「注入メソッド」として理解されるすべてのメソッドがダンプされます。出力は次のようになります
array (size=23)
'__construct' => boolean true
'setData' => boolean false
'setHydrator' => boolean false
'setBindOnValidate' => boolean false
'setBaseFieldset' => boolean false
'setValidationGroup' => boolean false
'setInputFilter' => boolean false
'setUseInputFilterDefaults' => boolean false
'setPreferFormInputFilter' => boolean false
'setWrapElements' => boolean false
'setOptions' => boolean false
'setFormFactory' => boolean true
'setPriority' => boolean false
'setMessages' => boolean false
'setObject' => boolean false
'setUseAsBaseFieldset' => boolean false
'setName' => boolean false
'setAttribute' => boolean false
'setAttributes' => boolean false
'setValue' => boolean false
'setLabel' => boolean false
'setLabelAttributes' => boolean false
'prepareElement' => boolean true
ご覧のとおり、メソッドprepareElement(FormInterface $form)
はインジェクション メソッドとしてマークされています。これは、(現在のDi イントロスペクション戦略の時点で)prepareElement
が interfaceZend\Form\ElementPrepareAwareInterface
で定義されているため2.1.0
です。
Zend\Di
インジェクション メソッドは、オブジェクトがインスタンス化された後に呼び出されるようにマークされているため、 (ではない)Zend\Di
のインスタンスを見つけることができません。Zend\Form\FormInterface
Zend\Form\Form
ご覧のとおりZend\Di
、この場合、変更は関係ありません。最終的には報告するか、ニーズに合わせてイントロスペクション戦略を変更することができます。
個人的には、そのメソッドを呼び出すべきではないと思いますし、メソッドがインターフェイスZend\Di
の一部であるべきだとも思いません。*Aware*