Как удалить стандартные <b></ b> метки из Zend FormErrors

Я довольно новый 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 ответа

Просто создайте собственный декоратор, попробуйте что-то вроде этого

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

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

Я понимаю, что немного опоздал на вечеринку, но так как это топ-5 результатов Google, и до сих пор без ответа, я решил внести свой вклад.

Лучший способ расширить 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);
    }
}
Другие вопросы по тегам