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

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

Перед тем, как получить данные из формы, нужно сначала создать саму форму. В Drupal 8 это можно сделать с помощью модуля Form API.


/**
 * Implements hook_form().
 */
function my_module_custom_form($form, $form_state) {
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Your Name'),
    '#required' => TRUE,
  );

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

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );

  return $form;
}

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

Шаг 2: Обработка данных из формы

Когда пользователь заполняет форму и отправляет ее, данные должны быть обработаны. Для этого в Drupal 8 используется функция hook_form_submit().


/**
 * Implements hook_form_submit().
 */
function my_module_custom_form_submit($form, &$form_state) {
  $name = $form_state['values']['name'];
  $email = $form_state['values']['email'];

  // Делаем что-то с данными
  // ...

  drupal_set_message(t('Form submitted. Thank you!'));

  // Перенаправляем на другую страницу
  $form_state['redirect'] = 'some/other/page';
}

В этом примере мы извлекаем значения полей «name» и «email» из формы с помощью массива $form_state[‘values’]. Затем мы можем выполнить необходимые действия с этими данными, например, сохранить их в базе данных или отправить по электронной почте. Здесь мы просто выводим сообщение о том, что форма была успешно отправлена, и перенаправляем пользователя на другую страницу.

Часто задаваемые вопросы

1. Как добавить валидацию формы?

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


/**
 * Implements hook_form_validate().
 */
function my_module_custom_form_validate($form, &$form_state) {
  $name = $form_state['values']['name'];

  if (empty($name)) {
    form_set_error('name', t('Please provide your name.'));
  }
}

2. Как добавить аякс-обновление формы?

Чтобы добавить аякс-обновление формы, можно использовать функцию hook_form_alter(). В этой функции вы можете добавить аякс-обновление к любому элементу формы, указав его в качестве цели для аякс-набора.


/**
 * Implements hook_form_alter().
 */
function my_module_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'my_custom_form') {
    $form['name']['#ajax'] = array(
      'callback' => 'my_module_custom_form_name_callback',
      'wrapper' => 'name-wrapper',
    );

    $form['name_wrapper'] = array(
      '#type' => 'container',
      '#attributes' => array('id' => 'name-wrapper'),
    );
  }
}

function my_module_custom_form_name_callback($form, &$form_state) {
  return $form['name_wrapper'];
}

3. Как сохранить данные формы в базе данных?

Для сохранения данных формы в базе данных, нужно использовать функции API Drupal 8 для работы с базой данных, такие как db_insert() или db_update(). Вы можете вызвать эти функции в функции hook_form_submit() и передать ей значения полей для сохранения.


/**
 * Implements hook_form_submit().
 */
function my_module_custom_form_submit($form, &$form_state) {
  $name = $form_state['values']['name'];
  $email = $form_state['values']['email'];

  $fields = array(
    'name' => $name,
    'email' => $email,
  );

  db_insert('my_table')
    ->fields($fields)
    ->execute();

  drupal_set_message(t('Form submitted. Thank you!'));
}