0

在 ZF2 中,我用自己的(称为My\Form\Element\Text)覆盖了 Text 元素。现在我想这样做,以便当我向表单添加文本元素时,它默认为我的覆盖类而不是Zend\Form\Element\Text

$this->add([
    'type' => 'text',
    'name' => 'to',
]);

我知道我可以使用'type' => 'My\Form\Element\Text'而不是 just 'type' => 'text',但我试图找出是否可以避免这种情况并默认使用自定义元素。

我已经尝试了这两种技术:

模块.config.php

return [
    'form_elements' => [
        'invokables' => [
            'text' => 'My\Form\Element\Text',
        ],
    ],
];

模块.php

class Module {

    public function getFormElementConfig() {
        return [
            'invokables' => [
                'text' => 'My\Form\Element\Text',
            ],
        ];
    }
}

这些都不起作用(仍然得到一个实例Zend\Form\Element\Text)。是否有其他注册元素的方法,以便该Zend\Form\Factory::create()方法创建我的自定义元素的实例而不是 Zend 版本?

4

1 回答 1

1

尽管您的配置是正确的,但在使用自定义元素时需要注意一些问题,详细信息请参见此处的文档

抓到 1

如果通过扩展 Zend\Form\Form 创建表单类,则不能在 __construct-or 中添加自定义元素,而应在 init() 方法中添加

抓住 2

您不能直接实例化您的表单类,而是通过 Zend\Form\FormElementManager 获取它的实例

于 2013-10-18T18:51:48.137 回答