在ZF2中,我用自己的方法覆盖了Text元素(称之为My\Form\Element\Text
)。现在我想这样做,以便当我向表单添加一个文本元素时,它默认为我的重写类而不是Zend\Form\Element\Text
:
$this->add([
'type' => 'text',
'name' => 'to',
]);
我知道我可以使用'type' => 'My\Form\Element\Text'
而不仅仅是'type' => 'text'
,但我想知道我是否可以避免这种情况,并且默认情况下只使用自定义元素。
我尝试过这两种技巧:
module.config.php
return [
'form_elements' => [
'invokables' => [
'text' => 'My\Form\Element\Text',
],
],
];
Module.php
class Module {
public function getFormElementConfig() {
return [
'invokables' => [
'text' => 'My\Form\Element\Text',
],
];
}
}
这些都没有奏效(仍然获得Zend\Form\Element\Text
的实例)。是否有其他注册元素的方法,以便Zend\Form\Factory::create()
方法创建我的自定义元素的实例而不是Zend版本?
答案 0 :(得分:1)
虽然您的配置是正确的,但在使用自定义元素时需要注意一些问题,detailed in the docs here
抓住1
如果要通过扩展Zend \ Form \ Form来创建表单类,则不能在__construct中添加自定义元素,或者在init()方法中添加自定义元素
抓住2
您不能直接实例化您的表单类,而是通过Zend \ Form \ FormElementManager获取它的实例