Zend框架装饰器子表单向DD包装器标签添加一个类标签


Zend Framework decorator subform add a class tag to DD wrapper tag

我有这样一个表单:

class Request_Form_Prova extends Zend_Form
{
    public function init()
    {
        $this->setMethod('post');
        $SubForm_Step = new Zend_Form_SubForm();
        $SubForm_Step->setAttrib('class','Step');
        $this->addSubform($SubForm_Step, 'Chicco'); 
        $PrivacyCheck = $SubForm_Step->createElement('CheckBox', 'PrivacyCheck');
        $PrivacyCheck->setLabel('I have read and I agre bla bla...')
                     ->setRequired(true)
                     ->setUncheckedValue('');
        $PrivacyCheck->getDecorator('Label')->setOption('class', 'inline');
        $SubForm_Step->addElement($PrivacyCheck);

        $SubForm_Step->addElement('submit', 'submit', array(
            'ignore'   => true,
            'label'    => 'OK',
        ));
    }
}

生成以下HTML:

<form enctype="application/x-www-form-urlencoded" method="post" action="">
    <dl class="zend_form">
        <dt id="Chicco-label">&nbsp;</dt>
        <dd id="Chicco-element">
            <fieldset id="fieldset-Chicco" class="Step">
                <dl>
                    <dt id="Chicco-PrivacyCheck-label"><label for="Chicco-PrivacyCheck" class="inline required">I have read and I agre bla bla...</label></dt>
                    <dd id="Chicco-PrivacyCheck-element">
                        <input type="hidden" name="Chicco[PrivacyCheck]" value=""><input type="checkbox" name="Chicco[PrivacyCheck]" id="Chicco-PrivacyCheck" value="1">
                    </dd>
                    <dt id="submit-label">&nbsp;</dt>
                    <dd id="submit-element">
                        <input type="submit" name="Chicco[submit]" id="Chicco-submit" value="OK">
                    </dd>
                </dl>
            </fieldset>
        </dd>
    </dl>
</form>

如何将class="Test"添加到<dd id="Chicco-element">元素中?
<dd id="Chicco-element" class="Test">

我想这样做,但是它不起作用:

$SubForm_Step->getDecorator('DdWrapper')->setOption('class', 'Test');

$SubForm_Step->getDecorator('DtDdWrapper')->setOption('class', 'Test');

我该怎么做?
如何将子表单的DD和DT元素包装到另一个DL元素中?

这样的

:

<dl class="zend_form">
  <dl>
     <dt id="Chicco-label">&nbsp;</dt>
     <dd id="Chicco-element">
         <fieldset id="fieldset-Chicco" class="Step">
             <dl>
             .......

不能这样添加类。从第67行开始查看Zend_Form_Decorator_DtDdWrapper的源文件:

return '<dt id="' . $elementName . '-label">' . $dtLabel . '</dt>' .
    '<dd id="' . $elementName . '-element">' . $content . '</dd>';

你可以用你自己的类来扩展这个装饰器,并重写渲染方法来把这些类添加到标签中。