Zend_Form中元素周围的文本

时间:2012-03-09 09:19:14

标签: zend-framework zend-form zend-form-element zend-decorators

所以我创建了一个简单的Zend_Form,我希望以这种方式显示它的一个元素:

Label:      text [input] text2

我已经使用LabelDecorator成功添加标签,我甚至可以使用DescriptionDecorator添加text1或text2作为描述,但我无法弄清楚如何添加它们。我知道我可以添加两个DescriptionDecorators,一个前置,一个附加,但它们都有相同的内容。

2 个答案:

答案 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',
));
?>

你认为这是一个很好的解决方案,有什么不妥之处吗?