Как я могу использовать декоратор формы zend для отображения ошибок внутри метки переноса тега абзаца и ввода

#zend-framework #zend-form #zend-decorators

#zend-framework #zend-form #zend-декораторы

Вопрос:

Я хотел бы отобразить следующую разметку:

 <div class="row">
<p>
  <label>Your Name</label>
  <input type="text" class="text_field" name="name">
  <ul class="errors">
    <li>Waarde is vereist en kan niet leeg worden gelaten</li>
  </ul>  
</p>
</div>
 

Это мой элемент формы Zend декоратор:

 $this->addElement('text', 'name', array(        
            'label' => 'Naam:',
            'class' => 'text_field',
            'required' => true,
            'decorators' => array(
                'ViewHelper',
                'Label',
                'Errors',
                array(array('row' => 'HtmlTag'), array('tag' => 'p')),
                array(array('content' => 'HtmlTag'), array('tag' => 'div', 'class' => 'row'))
            )));
 

Но это всегда отображает список ul под тегом p и никогда внутри. Он также добавляет дополнительный тег p под списком.

 <div class="row">
  <p>
    <label class="required" for="name">Naam:</label>
    <input type="text" class="text_field" value="" id="name" name="name">
  </p>
  <ul class="errors">
    <li>Waarde is vereist en kan niet leeg worden gelaten</li>
  </ul>
  <p></p>
</div>
 

Что я делаю не так?

Ответ №1:

Нашел это! Моя глупая ошибка. Я проверил только окончательный вывод в моем браузере. Я использую шаблон, который также загружает javascript, и это изменяет DOM, что создает нежелательный результат.

Итак, первая настройка декоратора работала правильно.

Ответ №2:

Попробуйте выполнить следующее:

 $this->addElement('text', 'name', array(        
            'label' => 'Naam:',
            'class' => 'text_field',
            'required' => true,
            'decorators' => array(
                'ViewHelper',
                'Label',
                'Errors',
                array(array('content' => 'HtmlTag'), array('tag' => 'p')),
                array(array('content' => 'HtmlTag'), array('tag' => 'div', 'class' => 'row'))
            )));
 

Комментарии:

1. Это не сработает, поскольку оба декоратора HtmlTag имеют одинаковый псевдоним «content», и поэтому будет использоваться последний определенный.