Zend framework Zend表单将范围添加到标签

Zend framework Zend表单将范围添加到标签,zend-framework,zend-form,Zend Framework,Zend Form,Zend今天下午把我逼疯了,我需要在标签里面加一个: <label><span>Some Text</span></label> 有什么想法吗?我快死了 J 编辑: 我不确定这是否会影响它,但它基本上会从一个数组中创建许多复选框,因此它处于foreach循环中: foreach($software as $prev => $p) { //$checkbox->setLabel($p);

Zend今天下午把我逼疯了,我需要在标签里面加一个:

<label><span>Some Text</span></label>
有什么想法吗?我快死了

J

编辑:

我不确定这是否会影响它,但它基本上会从一个数组中创建许多复选框,因此它处于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。编写一个自定义装饰器:

class MyLabel extends Zend_Form_Decorator_Abstract {
        public function render($content) {
                return sprintf(
                    '<label><span>Some Text</span></label>%s',
                    $content
                ) ;
        }
}
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'))
    ));
$checkbox->setLabel('Some Text');
$checkbox->setDecorators(数组(
“ViewHelper”,
数组(数组('data'=>'HtmlTag'),
数组('tag'=>'div','class'=>'myspan'),
数组('Label',数组('escape'=>false,'tag'=>'span','class'=>'sdfdsf'))
));

显然,这种方法只能小心使用,因为它可能会导致XSS漏洞。

感谢您的回答,我需要将跨度环绕在标签输出周围,因此它将是标签输出。上面的代码将为您提供一些文本。这不是你想要的吗?如果没有,恐怕我误解了你的问题-在这种情况下,最好是你发布一个例子,说明整个表单在HTML中应该是什么样子的。很抱歉造成混淆。我正在输出表单$this->formSoftware();所以当它输出我需要的时候。标记OutputOutput,然后您可以使用带有
return sprintf('%sSome Text',$content)的自定义装饰器解决方案谢谢如何使用自定义装饰器以及代码放在哪里?以php的形式?谢谢
$checkbox->addDecorator(new MyLabel());
$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'))
    ));