A free and open-source book on ZF3 for beginners


7.13. Стандартные помощники видов форм

Стандартные помощники видов форм, предоставляемые ZF3, показаны ниже в таблицах 7.13 - 7.16. Эти классы содержатся в пространстве имен @sZend\Form\View\Helper. Как видно из раблиц, помощники видов можно разделить на следующие категории:

Таблица 7.13. Помощники видов, предназначенные для работы с формами
Имя метода Описание
Общие помощники
Form Визуализирует форму целиком и все ее элементы.
FormElement Визуализирует один элемент формы.
FormElementErrors Визуализирует ошибки валидации для элемента формы.
FormRow Визуализирует метку, поле и ошибки валидации
Таблица 7.14. Помощники HTML4-полей
Имя метода Описание
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>.
Таблица 7.15. Помощники HTML5-полей
Имя метода Описание
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">.
Таблица 7.16. Другие помощники
Имя метода Описание
FormCaptcha Визуализирует поле безопасности CAPTCHA.
FormDateSelect Визуализирует поле выбора даты.
FormDateTimeSelect Визуализирует поле выбора даты и времени.
FormMonthSelect Визуализирует поле выбора месяца.
FormMultiCheckbox Визуализирует поле нескольких флажков.
FormCollection Визуализирует коллекцию элементов.

В следующих разделах мы опишем несколько наиболее часто используемых помощников видов, а также представим примеры их использования.

7.13.1. Визуализация элемента формы

Поле формы можно визуализировать с помощью помощника вида FormElement. Он задуман быть максимально гибким и распознавать как можно больше типов полей. Так, с его помощью вы можете создавать HTML-разметку для текстовых полей, кнопок, выпадающих списков и т.д.

Методы, предоставляемые этим помощником, перечислены в таблице 7.17.

Метод 7.17. Методы, предоставляемые помощником вида FormElement
Имя метода Описание
render($element) Магический PHP-метод, который визуализирует заданное поле формы.
__invoke($element) Магический PHP-метод, который визуализирует заданное поле формы (тот же эффект, что и от render()).

Как видите, существуют два метода, делающие одно и то же:

<?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) (например, FormText FormSubmit и др.) Вместо этого можно использовать общий помощник вида FormElement, который автоматически определяет тип поля и создает нужный HTML-код.

7.13.2. Визуализация ошибок валидации элемента

Класс помощника вида FormElementErrors позволяет создать HTML-разметку для ошибок валидации полей (если они есть). Если для определенного элемента нет ошибок валидации, помощник не создаст выходных данных.

Пример использования помощника вида FormElementErrors представлен ниже:

<?php 
// Мы полагаем, что модель формы хранится в переменной $form.
// Визуализируем ошибки валидации для поля эл. почты.
echo $this->formElementErrors($form->get('email')); 

Если ошибки валидации были, этот код сгенерирует неупорядоченный список ошибок, используя HTML-тег <ul>. Этот список будет содержать столько элементов, сколько ошибок у определенного поля. Пример такого списка для поля эл. почты нашей формы обратной связи показан ниже:

<ul>
  <li>&#039;hostname&#039; 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> 

7.13.3. Визуализация метки элемента

Помощник FormLabel позволяет визуализировать текстовую метку для элемента:

<?php 
// Мы полагаем, что модель формы хранится в переменной $form.
// Визуализируем текстовую метку для поля эл. почты.
echo $this->formLabel($form->get('email')); 

После выполнения фрагмента выше, сгенерируется следующий HTML-код:

<label for="email">Your E-mail</label>

7.13.4. Визуализация строки формы

Помощник вида FormRow предназначен для упрощения визуализации поля формы, его метки и ошибок валидации. С помощью этого класса можно визуализировать эти элементы одним действием. Этот помощник гибко настраиваемый, так что вы можете применить другое оформление для строки формы. Методы этого помощника вида перечислены в таблице 7.18.

Таблица 7.18. Методы, предоставляемые помощником вида FormRow
Имя метода Описание
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>&#039;hostname&#039; 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> 

7.13.5. Визуализация формы целиком

Помощник вида Form позволяет визуализировать открывающий тег <form> и его атрибуты; и закрывающий тег </form>. Но его главная цель - это визуализация целой формы и всех ее полей одной строчкой кода. Public-методы помощника вида Form[Zend\Form\View\Helper\Form] резюмированы в таблице 7.19.

Table 7.19. Методы, предоставляемы помощником вида Form
Имя метода Описание
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);

Top