A free and open-source book on ZF3 for beginners


7.9. Пример: Создание модели формы обратной связи

Теперь, когда мы знаем, как задавать имя формы, действие и атрибуты методов, а также как добавлять поля (элементы) к форме, давайте создадим класс модели для формы обратной связи, которую мы использовали в предыдущих примерах.

Как мы знаем, классы моделей форм для модуля Application "живут" в пространстве имен Application\Form. Таким образом, нам нужно создать файл ContactForm.php в каталоге Form под корневым каталогом модуля Application (рисунок 7.14).

Figure 7.14. Каталог Form Figure 7.14. Каталог Form

В классе формы у нас будут два метода:

Мы помещаем алгоритм создания поля в 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 вы видите схематическое графическое представление созданной нами модели формы.

Рисунок 7.15. Модель формы обратной связи и ее элементы Рисунок 7.15. Модель формы обратной связи и ее элементы


Top