Zend Form为标签添加跨度

时间:2013-09-20 14:27:00

标签: zend-framework zend-form

Zend今天下午让我疯了,我需要在标签内添加一个:

<label><span>Some Text</span></label>

这是我的表单装饰器,但它根本不适合我放在第一个标签之前:

 $checkbox->setDecorators(array(
            'ViewHelper',
            array(array('data' => 'HtmlTag'),
            array('tag' => 'div', 'class' => 'myspans')),
            array('Label', array('tag' => 'span', 'class' => 'sdfdsf'))
        ));

任何想法杀了我!?

Ĵ

编辑:

我不确定这是否会影响它,但它基本上会从数组中创建大量复选框,所以它在foreach循环中:

        foreach($software as $prev => $p)
    {
        //$checkbox->setLabel($p);
        $checkbox->addMultiOption($prev,$p);
        $checkbox->setAttrib('id', 'checkbox');
        $checkbox->setSeparator('  ');
            $checkbox->setDecorators(array(
            'ViewHelper',
            array(array('data' => 'HtmlTag'),
            array('tag' => 'div', 'class' => 'myspans')),
            array('Label', array('tag' => 'span', 'class' => 'sdfdsf'))
        ));
    }

1 个答案:

答案 0 :(得分:0)

我可以尝试两次:

<强> 1。写一个自定义装饰器:

class MyLabel extends Zend_Form_Decorator_Abstract {
        public function render($content) {
                return sprintf(
                    '<label><span>Some Text</span></label>%s',
                    $content
                ) ;
        }
}

然后只需将其添加到装饰器列表中:

$checkbox->addDecorator(new MyLabel());

<强> 2。禁用转义

你也可以禁用转义并直接将html标签放在标签内:

$checkbox->setLabel('<span>Some Text</span>');
$checkbox->setDecorators(array(
        'ViewHelper',
        array(array('data' => 'HtmlTag'),
        array('tag' => 'div', 'class' => 'myspans')),
        array('Label', array('escape' => false, 'tag' => 'span', 'class' => 'sdfdsf'))
    ));

显然,这种方法应该谨慎使用,因为它可能会导致XSS漏洞。