如何在使用Zend_Form时向注册表添加插件?

时间:2010-04-27 18:22:34

标签: php zend-framework exception registry zend-form

我有一个zend表单,我正在初始化如下:

$ form = new Form_XYZ();

我有一个这种形式的显示组,我这样称呼:

    $form->addDisplayGroup($generalSettingsGroup,
                           'general',
                            array(
                                'legend' => 'General',
                                'disableDefaultDecorators' => true,
                                'decorators' => array(
                                                    'FormElements',
                                                    'FieldSet',
                                                     array('HtmlTag', 
                                                            array('tag' => 'div', 'class' => 'general')
                                                           )
                                                    )
                                )
                            );

我收到此错误:

    ArrayObject Object
    (
         [exception] => Zend_Loader_PluginLoader_Exception Object
         (
             [message:protected] => Plugin by name 'FieldSet' was not found in the registry;   used paths:Zend_Form_Decorator_: Zend/Form/Decorator/
             [string:private] => 
             [code:protected] => 0
             [file:protected] => /usr/share/pear/PEAR/Zend/Loader/PluginLoader.php
             [line:protected] => 406
             [trace:private] => Array
             ...................

如何将FieldSet插件添加到注册表中?我正在使用默认的Zend_Form Fieldset装饰器。

2 个答案:

答案 0 :(得分:3)

在文件Zend / Form / DisplayGroup.php中,FieldSet为'Fieldset'(小写'S')。 我把它改成了Fieldset,它运行正常。

答案 1 :(得分:2)

然而,有一些奇怪的事情:当包含多个子表单并将Decorator设置为包含Fieldset时,如果你误认为其中一些是FieldSet(有大写S),那就没问题了。

似乎一个小写可以解决所有其他问题。

此外,您可以从Zend(Zend_Form_Decorator_Fieldset)加载FieldSet类,并使所有内容都适用于大写S.

(用Zend 1.11测试)