在Zend Framework中,如何使用装饰器将表单元素包装在标签中?

Mar*_*cel 2 php forms zend-framework decorator

我想用标签包装表单元素

<label for="email">E-mail <input type="text" name="email" id="email" /></label>
Run Code Online (Sandbox Code Playgroud)

我能找到的唯一选择是改变位置; 但它只接受'prepend'和'append':

<!-- prepend -->
<label for="email">E-mail</label> <input type="text" name="email" id="email" />
<!-- append -->
<input type="text" name="email" id="email" /> <label for="email">E-mail</label>
Run Code Online (Sandbox Code Playgroud)

那不是我追求的.我可以改变Zend_Form_Decorator_Label类,但这是最后一种选择.

lin*_*ead 5

不幸的是,这似乎不太可能,你可能不得不写一个自定义装饰器.不过应该很简单.

请注意我刚刚在这里写这个,它是未经测试但基于另一个装饰器所以它应该工作很少/没有修改

class Your_Form_Decorator_Date extends Zend_Form_Decorator_Abstract {
    public function render($content) {
       $element = $this->getElement();

       $name = $element->getFullyQualifiedName();
       return '<label for="'.$name.'">'. $element->getLabel() . ' '.$content.'</label>';

    }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果您向表单添加正确的前缀.

$this->addPrefixPath('Your_Form', 'Your/Form/');
Run Code Online (Sandbox Code Playgroud)

您应该能够使用它将输入(FormElement装饰器)包装在label标签中.

对不起,我没有机会实际测试这个,但鉴于我的其他装饰工作如何工作.应该没问题.

编辑:感谢您指出标签文本没有呈现gnarf.这已经修复了.