Стандартные помощники видов форм, предоставляемые ZF3, показаны ниже в таблицах 7.13 - 7.16.
Эти классы содержатся в пространстве имен @sZend\Form\View\Helper. Как видно из раблиц, помощники
видов можно разделить на следующие категории:
Общие помощники видов форм. Эти классы предназначены для визуализации
формы целиком (помощник Form) или одного ее элемента (помощник FormElement),
а также возможных ошибок валидации (помощник FormElementErrors).
Помощники видов для визуализации HTML-полей определенных типов. Эти помощники позволяют
генерировать HTML-разметку для конкретных полей форм (например, FormButton, FormRadio и т.д.)
и текстовую метку (FormLabel).
Помощники видов для визуализации полей форм, введенных в HTML5. Аналогичнв
помощникам из предыдущей категории, но предназначены для визуализации HTML-5
полей (например, FormDate, FormUrl и т.д.)
Другие помощники видов. В эту категорию мы поместим классы помощников видов, предназначенные
для визуализации полей, предоставляемых ZF3 (FormMultiCheckbox, FormCaptcha и др.)
| Имя метода | Описание |
|---|---|
| Общие помощники | |
Form |
Визуализирует форму целиком и все ее элементы. |
FormElement |
Визуализирует один элемент формы. |
FormElementErrors |
Визуализирует ошибки валидации для элемента формы. |
FormRow |
Визуализирует метку, поле и ошибки валидации |
| Имя метода | Описание |
|---|---|
FormButton |
Визуализирует поле формы <button>. |
FormCheckbox |
Визуализирует поле <input type="checkbox"> field. |
FormFile |
Визуализирует поле формы <input type="file">. |
FormHidden |
Визуализирует поле формы <input type="hidden">. |
FormInput |
Визуализирует поле формы <input>. |
FormImage |
Визуализирует поле формы <input type="image">. |
FormLabel |
Визуализирует тег <label>. |
FormPassword |
Визуализирует поле формы <input type="password">. |
FormRadio |
Визуализирует поле формы <input type="radio">. |
FormReset |
Визуализирует поле формы <input type="reset">. |
FormSelect |
Визуализирует выпадающее поле <select>. |
FormSubmit |
Визуализирует поле формы <input type="submit">. |
FormText |
Визуализирует поле формы <input type="text">. |
FormTextarea |
Визуализирует многострочное текстовое поле <textarea>. |
| Имя метода | Описание | |
|---|---|---|
FormColor |
Визуализирует HTML5-поле формы <input type="color">. |
|
FormDate |
Визуализирует HTML5-поле формы <input type="date">. |
|
FormDateTime |
Визуализирует HTML5-поле формы <input type="date">. |
|
FormDateTimeLocal |
Визуализирует HTML5-поле формы <input type="datetime-local">. |
|
FormEmail |
Визуализирует HTML5-поле формы <input type="email">. |
|
FormMonth |
Визуализирует HTML5-поле формы <input type="month">. |
|
FormNumber |
Визуализирует HTML5-поле формы <input type="number">. |
|
FormRange |
Визуализирует HTML5-поле формы <input type="range">. |
|
FormTel |
Визуализирует HTML5-поле формы <input type="tel">. |
|
FormTime |
Визуализирует HTML5-поле формы <input type="time">. |
|
FormUrl |
Визуализирует HTML5-поле формы <input type="url">. |
|
FormWeek |
Визуализирует HTML5-поле формы <input type="week">. |
| Имя метода | Описание |
|---|---|
FormCaptcha |
Визуализирует поле безопасности CAPTCHA. |
FormDateSelect |
Визуализирует поле выбора даты. |
FormDateTimeSelect |
Визуализирует поле выбора даты и времени. |
FormMonthSelect |
Визуализирует поле выбора месяца. |
FormMultiCheckbox |
Визуализирует поле нескольких флажков. |
FormCollection |
Визуализирует коллекцию элементов. |
В следующих разделах мы опишем несколько наиболее часто используемых помощников видов, а также представим примеры их использования.
Поле формы можно визуализировать с помощью помощника вида FormElement. Он задуман быть
максимально гибким и распознавать как можно больше типов полей. Так, с его помощью вы можете
создавать HTML-разметку для текстовых полей, кнопок, выпадающих списков и т.д.
Методы, предоставляемые этим помощником, перечислены в таблице 7.17.
| Имя метода | Описание |
|---|---|
render($element) |
Магический PHP-метод, который визуализирует заданное поле формы. |
__invoke($element) |
Магический PHP-метод, который визуализирует заданное поле формы (тот же эффект, что и от render()). |
Как видите, существуют два метода, делающие одно и то же:
render() создает HTML-разметку для поля формы.
Он принимает один аргумент -- экземпляр элемента, который нужно визуализировать. Вы
можете извлечь элемент формы с помощью метода модели формы get() (см. пример ниже).__invoke() - это удобная обертка, в этом случае требуется писать меньше кода.<?php
// Мы полагаем, что модель формы хранится в переменной $form.
// Визуализируем поле эл. почты с помощью метода render().
echo $this->formElement()->render($form->get('email')); ?>
// То же самое, но с помощью __invoke
echo $this->formElement($form->get('email'));
После выполнения фрагмента выше, сгенерируется следующий HTML-код:
<input type="text" name="email" id="email" value="">
Как правило, нет необходимости вызывать помощники видов для определенных полей HTML (или HTML5) (например,
FormTextFormSubmitи др.) Вместо этого можно использовать общий помощник видаFormElement, который автоматически определяет тип поля и создает нужный HTML-код.
Класс помощника вида FormElementErrors позволяет создать HTML-разметку для
ошибок валидации полей (если они есть). Если для определенного элемента нет ошибок
валидации, помощник не создаст выходных данных.
Пример использования помощника вида FormElementErrors представлен ниже:
<?php
// Мы полагаем, что модель формы хранится в переменной $form.
// Визуализируем ошибки валидации для поля эл. почты.
echo $this->formElementErrors($form->get('email'));
Если ошибки валидации были, этот код сгенерирует неупорядоченный список ошибок, используя
HTML-тег <ul>. Этот список будет содержать столько элементов, сколько ошибок у определенного
поля. Пример такого списка для поля эл. почты нашей формы обратной связи показан ниже:
<ul>
<li>'hostname' is not a valid hostname for the email address</li>
<li>The input does not match the expected structure for a DNS hostname</li>
<li>The input appears to be a local network name but local network names are not allowed</li>
</ul>
Помощник FormLabel позволяет визуализировать текстовую метку для элемента:
<?php
// Мы полагаем, что модель формы хранится в переменной $form.
// Визуализируем текстовую метку для поля эл. почты.
echo $this->formLabel($form->get('email'));
После выполнения фрагмента выше, сгенерируется следующий HTML-код:
<label for="email">Your E-mail</label>
Помощник вида FormRow предназначен для упрощения визуализации поля формы,
его метки и ошибок валидации. С помощью этого класса можно визуализировать
эти элементы одним действием. Этот помощник гибко настраиваемый, так что вы можете
применить другое оформление для строки формы. Методы этого помощника вида перечислены
в таблице 7.18.
| Имя метода | Описание |
|---|---|
render($element) |
Визуализирует строку формы. |
__invoke($element, $labelPosition, $renderErrors, $partial) |
Визуализирует строку формы (обертка). |
setInputErrorClass($inputErrorClass) |
Задает SSS-класс ошибки входных данных. |
setLabelAttributes($labelAttributes) |
Задает атрибуты метки. |
setLabelPosition($labelPosition) |
Задает позицию метки. (перед или после поля). |
setRenderErrors($renderErrors) |
Устанавливает, визуализируются ли ошибки этим помощником. |
setPartial($partial) |
Задает частичный скрипт вида, используемый для визуализации строки. |
Пример использования помощника вида FormRow представлен ниже:
<?php
// Мы полагаем, что модель формы хранится в переменной $form.
// Визуализируем поле эл. почты, его метку и (возможно) ошибки валидации.
echo $this->formRow($form->get('email'));
После выполнения фрагмента выше, сгенерируется следующий HTML-код:
<label for="email">Your E-mail</label>
<input type="text" name="email" id="email">
<ul>
<li>'hostname' is not a valid hostname for the email address</li>
<li>The input does not match the expected structure for a DNS hostname</li>
<li>The input appears to be a local network name but local network names
are not allowed</li>
</ul>
Помощник вида Form позволяет визуализировать открывающий тег <form> и его атрибуты;
и закрывающий тег </form>. Но его главная цель - это визуализация целой формы и всех
ее полей одной строчкой кода. Public-методы помощника вида Form[Zend\Form\View\Helper\Form] резюмированы в таблице 7.19.
| Имя метода | Описание |
|---|---|
render($form) |
Визуализация целой формы и всех ее полей. |
__invoke($form) |
Магический PHP-метод, который визуализирует целую форму и все ее элементы (тот же эффект, что и от render()). |
openTag($form) |
Визуализирует открывающий тег <form>. |
closeTag() |
Визуализирует закрывающий тег </form> tag. |
Вы можете визуализировать форму целиком с помощью метода render() следующим образом:
// Мы полагаем, что модель формы хранится в переменной $form.
// Визуализируем форму целиком
echo $this->form()->render($form);
Того же результата можно достичь магическим методом __invoke (см. пример ниже):
// То же самое, но с помощью `__invoke`
echo $this->form($form);