A free and open-source book on ZF3 for beginners


7.7. Модель формы

Модель формы - это обычно PHP-класс, который создает некоторое количество полей. Базовым классом для всех моделей форм является класс Form, определенный в компоненте Zend\Form.

Поля в модели формы могут быть сгруппированы в наборы полей (fieldsets). Более того, модель формы сама может считаться набором полей. Этот факт отражен в наследовании класса формы (рисунок 7.10).

Рисунок 7.10. Наследование класса формы Рисунок 7.10. Наследование класса формы

Как видно из рисунка, класс Form расширяет класс Fieldset. Класс Fieldset в свою очередь наследуется от класса Element, который представляет собой одно поле формы и его атрибуты.

Это наследование на первый взгляд может показаться странным, но все станет логичным, если вы вспомните, что класс Form наследует методы для добавления полей формы от класса Fieldset и методы для задания атрибутов формы от класса Element.

Ниже предоставлен фрагмент класса модели для формы обратной связи из предыдущих примеров:

<?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->setAttribute('action', '/contactus');
  
        // Здесь создаем поля формы ...	
    }
}

Как вы видите, модели форм модуля сайта Application принадлежат (условно) пространству имен Application\Form (строка 2).

В строке 7 мы определяем класс модели формы ContactForm, который расширяет базовый класс Form.

В строке 10 мы определяем метод конструктора для этого класса. Так как мы наследуем нашу модель формы от базового класса Form, нам надо вызвать конструктор родительского класса для его инициализации (строка 13). Конструктор родительского класса принимает опциональный аргумент, позволяющий ему задать имя формы ('contact-form').

Также мы задаем метод передачи данных (POST), используя метод setAttribute(), предоставляемый базовым классом (строка 16). setAttribute() принимает два параметра: первый - это имя атрибута, который нужно задать, а второй - значение атрибута.

Вы также можете задать атрибут формы "action" (строка 19) с помощью метода setAttribute(), аналогично тому, как вы сделали это с атрибутом "name". Вообще говоря, как вы увидите позже, задание атрибута "action" необязательно.

Задание атрибута "action" для формы опционально, так как пустое действие формы заставляет браузер отправить данные формы на URL текущей страницы. В большинстве ситуаций этого достаточно, так как обычно используется одно действие контроллера и для отображения формы, и для обработки ее данных.

Поля форм, как правило, создаются внутри конструктора модели формы (смотрите строку 21). В следующем разделе мы узнаем, какие имеются поля форм и как добавить их к модели формы.


Top