Теперь, когда мы знаем, как задавать имя формы, действие и атрибуты методов, а также как добавлять поля (элементы) к форме, давайте создадим класс модели для формы обратной связи, которую мы использовали в предыдущих примерах.
Как мы знаем, классы моделей форм для модуля Application
"живут"
в пространстве имен Application\Form
. Таким образом, нам нужно
создать файл ContactForm.php в каталоге Form под корневым
каталогом модуля Application (рисунок 7.14).
В классе формы у нас будут два метода:
__construct()
будет определять имя формы и метод (POST), а также
инициализировать форму, добавляя элементы;addElements()
будет содержать код для
добавления элементов формы и будет вызываться конструктором. Мы помещаем алгоритм создания поля в private-метод
addElements()
, чтобы лучше структурировать код модели формы.
Код класса ContactForm
представлен ниже:
<?php
namespace Application\Form;
use Zend\Form\Form;
/**
* Эта форма используется для сбора данных обратной связи с пользователем:
* электронной почты, темы и текста.
*/
class ContactForm extends Form
{
// Конструктор.
public function __construct()
{
// Определяем имя формы
parent::__construct('contact-form');
// Задаем метод POST для этой формы
$this->setAttribute('method', 'post');
// Добавляем элементы формы
$this->addElements();
}
// Этот метод добавляет элементы к форме (поля ввода и
// кнопку отправки формы).
private function addElements()
{
// Добавляем поле "email"
$this->add([
'type' => 'text',
'name' => 'email',
'attributes' => [
'id' => 'email'
],
'options' => [
'label' => 'Your E-mail',
],
]);
// Добавляем поле "subject"
$this->add([
'type' => 'text',
'name' => 'subject',
'attributes' => [
'id' => 'subject'
],
'options' => [
'label' => 'Subject',
],
]);
// Добавляем поле "body"
$this->add([
'type' => 'text',
'name' => 'body',
'attributes' => [
'id' => 'body'
],
'options' => [
'label' => 'Message Body',
],
]);
// Добавляем кнопку отправки формы
$this->add([
'type' => 'submit',
'name' => 'submit',
'attributes' => [
'value' => 'Submit',
],
]);
}
}
В строке 10 данного фрагмента мы определяем класс ContactForm
, который расширяет базовый
класс Form
.
В строках 13-23 находится метод конструктора. Он вызывает конструктор базового класса
(строка 16) и передает имя формы в качестве аргумента ("contact-form").
В строке 19 вызывается метод setAttribute()
базового класса, позволяющий задать
имя метода для формы (в нашем случае метод POST).
В строке 22 вызывается private-метод addElements()
, который, собственно, и добавляет
элементы к форме. Код addElements()
находится в строках 27-73.
Чтобы добавить элементы к форме, мы вызываем метод add()
базового класса. Этот метод
принимает один аргумент -- массив, содержащий конфигурацию элемента. Мы добавляем четыре
поля: email
, subject
, body
и submit
.
На рисунке 7.15 вы видите схематическое графическое представление созданной нами модели формы.