我深入研究了这个问题,实际上抛出了一个异常。尝试运行以下操作:
$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 introspection strategy
)
prepareElement
在接口中定义
Zend\Form\ElementPrepareAwareInterface
,从那以后
2.1.0
.
由于注入方法标记为由调用
Zend\迪
在对象被实例化之后,
Zend\迪
在此未能找到
Zend\Form\FormInterface
(事实并非如此
Zend\Form\Form
).
所以正如你所看到的,变化与
Zend\迪
在这种情况下。你最终可能
report it
或者改变反省策略以满足你的需求。
我个人认为
Zend\迪
应调用该方法,也不应将该方法作为
*Aware*
界面