所以我创建了一个简单的Zend_Form,我希望以这种方式显示它的一个元素:
Label: text [input] text2
我已经使用LabelDecorator成功添加标签,我甚至可以使用DescriptionDecorator添加text1或text2作为描述,但我无法弄清楚如何添加它们。我知道我可以添加两个DescriptionDecorators,一个前置,一个附加,但它们都有相同的内容。
答案 0 :(得分:0)
您可以创建自己的装饰器:
class My_Form_Decorator_PlainText extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
return $content . $this->getOption('text');
}
}
然后多次添加此装饰器:
$this->addElement($this->createElement('text', 'fieldname')
->setLabel('Label')
->addPrefixPath('My_Form', 'My/Form/')
->setDecorators(array(
'Label',
array(array('before'=>'PlainText'), array('text' => 'hello')),
'ViewHelper',
array(array('after'=>'PlainText'), array('text' => 'world')),
)));
答案 1 :(得分:0)
我最终创建了一个自定义表单装饰器:
<?php
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';
class Zend_Form_Decorator_Surrounded extends Zend_Form_Decorator_Abstract
{
/**
* Render element
*
* @param string $content
* @return string
*/
public function render($content)
{
$options = $this->getOptions();
if(!isset($options['text'])) return $content;
return sprintf($options['text'], $content);
}
}
?>
我用这种方式:
<?php
$element->setDecorators(array(
'ViewHelper',
'Errors',
array('Surrounded', array('text' => 'text1 %s text2')),
'HtmlTag',
));
?>
你认为这是一个很好的解决方案,有什么不妥之处吗?