Форма Zend: как я могу показывать ошибки после тега label элемента?

#php #zend-form

#php #zend-form

Вопрос:

Я могу заставить ошибки отображаться после элемента form, но не непосредственно после тега label элемента form. Кто-нибудь знает, как я могу это сделать?? Заранее спасибо! Приветствия.

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

1. Вы имеете в виду, что хотите показывать ошибки между меткой и элементом?

2. Спасибо за ответ, Фил. Я хочу показывать ошибки после метки, но в пределах тега definition term.

Ответ №1:

Если вы хотите поместить ошибки элемента между элементом и его меткой, сохраняя стандартную разметку dt / dd, используйте что-то вроде этого

 $element->setDecorators(array(
    'ViewHelper',
    array('Errors', array('placement' => 'prepend')),
    array('HtmlTag', array('tag' => 'dd')),
    array('Label', array('tag' => 'dt'))
));
  

Важная часть — это 'placement' => 'prepend' в декораторе ошибок.

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

1. Фил, какой был бы наилучший способ настроить эти декораторы для применения ко всем формам? Должен ли я расширить функцию Zend_Form::addElement() вашим кодом?

2. @blacktie24 Вы можете использовать Zend_Form::setElementDecorators() для настройки всех декораторов элементов, однако это может не подойти. Другое предложение, хотя и довольно длинное, заключается не только в расширении Zend_Form , но и во всех элементах. Смотрите здесь и здесь пример

3. фил, я могу заставить его отображать только следующим образом: <идентификатор dt=»email-label»><label for=»email» class=»required»> Электронная почта:</label></dt> <label class=»error» сгенерировано =»true»> Значение обязательно и не может быть пустым</label> <dd><имя ввода=»email» идентификатор =»email» значение = «» class=»full» тип =»text»> </dd> Я пытаюсь сделать так, чтобы сообщение об ошибке находилось внутри тега definition term. Возможно ли это?

4. @blacktie24 Используя точный код в моем ответе, ошибки находятся внутри <dd> . Вы хотите сказать, что хотите, чтобы они были внутри <dt> ?

5. да, это то, о чем я спрашивал, действительно сожалею об отсутствии ясности в вопросе. Однако я просматривал код, и, похоже, это невозможно без расширения errors amp; label decorators, правильно ли это?

Ответ №2:

Я почти уверен, что вы можете сделать это, изменив декоратор, используемый для отображения элементов формы.

Проверьте здесь http://devzone.zend.com/article/3450

Эта статья поможет вам создать альтернативные декораторы для элементов.

Также здесь есть статья Zend о стандартных декораторах.

http://framework.zend.com/manual/en/zend.form.standardDecorators.html

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

1. В этом сила шаблона декоратора. Очень удобно в примерах вроде разметки формы. en.wikipedia.org/wiki/Decorator_pattern