Drupal 8 предоставляет мощные инструменты для создания и управления формами на веб-страницах. В этой статье мы рассмотрим, как добавить форму на страницу с использованием Drupal 8.

Шаг 1: Создание формы

Первым шагом является создание самой формы. Для этого необходимо создать новый модуль или открыть уже существующий модуль. В файле модуля, например, mymodule.module, добавьте следующий код:


use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Implements the MyForm form controller.
 */
class MyForm extends FormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'my_form';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Name'),
      '#required' => TRUE,
    ];
    $form['email'] = [
      '#type' => 'email',
      '#title' => $this->t('Email'),
      '#required' => TRUE,
    ];
    $form['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Submit'),
    ];
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    // Обработка отправленной формы.
  }

}

Это основной код для создания формы с полями «Имя» и «Email», а также кнопкой «Submit». Заполните форму другими необходимыми полями, если это необходимо.

Шаг 2: Добавление формы на страницу

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


  // ...

  /**
   * Callback for the example page.
   */
  public function mymodule_page_callback() {
    $build['form'] = \Drupal::formBuilder()->getForm('Drupal\mymodule\Form\MyForm');
    return $build;
  }

  // ...

Замените ‘Drupal\mymodule\Form\MyForm’ на фактическую путь к классу формы из первого шага.

Вопросы и ответы:

1. Как получить значения, отправленные из формы?

Для получения отправленных значений из формы вам необходимо добавить метод submitForm() в класс формы. В этом методе вы можете получить значения с помощью метода getValue() объекта FormStateInterface.


  public function submitForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state->getValue('name');
    // Обработка значений формы.
  }

2. Как добавить дополнительную проверку для полей формы?

Вы можете добавить кастомную проверку для полей формы, используя метод addConstraint() объекта полей формы. В следующем примере дополнительная проверка добавляется к полю «Email».


  $form['email'] = [
    '#type' => 'email',
    '#title' => $this->t('Email'),
    '#required' => TRUE,
    '#element_validate' => array('my_custom_validation'),
  ];

  // ...

  function my_custom_validation($element, FormStateInterface $form_state, $form) {
    $value = $element['#value'];
    // Проверка значения поля email.
  }

3. Как добавить сообщение об успешной отправке формы?

После успешной отправки формы вы можете добавить сообщение об успешной отправке, используя метод setRedirect() объекта формы. В следующем примере сообщение добавляется в метод submitForm().


  public function submitForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state->getValue('name');
    // Обработка значений формы.

    drupal_set_message($this->t('Form submission successful.'));
    $form_state->setRedirect('mymodule.page');
  }