如何从Zend FormErrors中删除默认的<b> </b>标签

时间:2012-10-22 06:40:04

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

我是Zend Framework的新手,我被困住了。

以下代码是我的表单装饰器设置的片段,我遇到了问题:

// prepend errors to top
$this->setDecorators(
    array(
        'FormElements',
        'Form',
        array(
            'FormErrors',
             array(
                'placement' => Zend_Form_Decorator_Abstract::PREPEND
             )
         )
    )
); 

当在视图上呈现错误时,我得到以下内容:

    <ul class="form-errors">
       <li>
          <b>First Name: </b>
          <ul class="errors">
             <li>You forgot to enter your First Name.</li>
          </ul>
       </li>
    </ul>

如何删除所有html,包括标签<b>First Name: </b>

2 个答案:

答案 0 :(得分:2)

只需创建自定义装饰器,尝试类似这样的

protected $_errorDecorator = array(
    'markupElementLabelEnd'   => '',
    'markupElementLabelStart' => '',
    'placement'=>Zend_Form_Decorator_Abstract::PREPEND
);

$this->setDecorators(array('FormElements','Form',
    array('FormErrors',
    $_errorDecorator)));

答案 1 :(得分:0)

我意识到我参加聚会的时间有点晚了,但由于这是谷歌的前5名结果,而且仍未得到答复,我认为我会做出贡献。

最好的方法是扩展Zend装饰器,重载renderLabel方法,添加renderLabels配置选项,然后检查它是否已设置。如果是这样,请不要调用呈现标签的父函数。

$form->setDecorators(
    array(
        'FormElements',
        'Form',
        array(
            'FormErrors',
             array(
                'placement' => 'prepend',
                'renderLabels' => false
             )
         )
    )
);

class My_Form_Decorator_FormErrors extends Zend_Form_Decorator_FormErrors
{
    /**
     * @see Zend_Form_Decorator_FormErrors::renderLabel()
     */
    public function renderLabel(Zend_Form_Element $element, Zend_View_Interface $view)
    {
        if ($this->getOption('renderLabels') === false) {
            return;
        }

        return parent::renderLabel($element, $view);
    }
}