在我的 Zend\Form\Fieldset AddressFieldset 中,它需要一个 Zend\Db\TableGateway\AbstractTableGateway BundeslandTable 用于 \Zend\Form\Element\Select()。
所以我在这个 AddressFieldset 中实现 \Zend\ServiceManager\ServiceManagerAwareInterface 并使用 init() 而不是 __construct()。
在 module.config.php 中(不仅在 'form_elements' 中测试,也在 'service_manager' 中)
'form_elements' => array(
'factories' => array(
'MyFormway\Form\Fieldset\Address' => function($sm) {
$addressFieldset = new MyFormway\Form\Fieldset\AddressFieldset();
$addressFieldset->setServiceManager($sm);
return $addressFieldset;
}
),
),
在 \Zend\Form\Form 的 init() 中:
$this->add(array(
'type' => 'MyFormway\Form\Fieldset\Address',
'name' => 'address',
));
这会引发错误:
Zend\Form\FormElementManager::get was unable to fetch or create an instance for MyFormway\Form\Fieldset\Address
为什么 zend 无法获取此 Fieldset 的实例?
编辑 - - - - - - - - - - - -
'form_elements' => array(
'factories' => array(
'MyFormway\Form\Fieldset\Address' => function($formElementManager) {
die('inna form_elements config');
$addressFieldset = new \MyFormway\Form\Fieldset\AddressFieldset();
$addressFieldset->setServiceManager($formElementManager->getServiceLocator());
return $addressFieldset;
}
),
),
因为我有 Zend\Form\FormElementManager 我获取了 ServiceLocator ...也许不需要,因为所有 XxxManager 都扩展了 Zend\ServiceManager\AbstractPluginManager 并且这扩展了 ServiceManager。在 FormElementManager 和 AbstractPluginManager 中都没有方法 getServiceManager()。
但我的问题:没有调用 die() 加上上面的错误。它是一个错误吗?...我代表一堵大墙:(
编辑 - - - - - - - - - - - -
它适用于表单,但不适用于字段集!!!