ZF2 - 注册自定义表单元素

时间:2013-10-16 13:51:01

标签: php zend-framework2

在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版本?

1 个答案:

答案 0 :(得分:1)

虽然您的配置是正确的,但在使用自定义元素时需要注意一些问题,detailed in the docs here

抓住1

  

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

抓住2

  

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

相关问题