0

我是相当新的 Zend 框架,我被卡住了。

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

// 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>

4

2 回答 2

2

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

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

$this->setDecorators(array('FormElements','Form',
    array('FormErrors',
    $_errorDecorator)));
于 2012-10-22T06:45:59.667 回答
0

我意识到我参加聚会有点晚了,但由于这是 Google 的前 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);
    }
}
于 2015-02-12T21:03:24.053 回答