Якщо визначена чітка ціль і присутня шалена мотивація, успішний результат гарантований. (с)

Оголошення форми в Drupal 8

Форми створюються за допомогою \Drupal\Core\Form\FormBuilderInterface. Класи форм відповідають за всю логіку форм, створення, валідацію та відправку з допомогою методів. В ядрі Drupal 8 є декілька різних класів форм для різних задач, від яких вони й наслідуються:

  • ConfigFormBase - для створення форм із налаштуваннями. Як правило, для адміністративних форм.
  • ConfirmFormBase - форма для підтвердження будь чого, наприклад, видалення контенту;
  • FormBase - базовий клас для всіх інших типів форм. 

Не залежно від обраного класу, ваш власний клас завжди матиме 2 методи при оголошенні форми: getFormId() і buildForm().

getFormId() - повертає (string) назву форми.

public function getFormId() {

   return 'my_custom_form';

}

 

buildForm() - відповідає за саму форму, то что в ней буде відбуватись. Повертає масив render arrays.

public function buildForm(array $form, FormStateInterface $form_state) {

$form['name'] = array(

'#type' => 'textfield',

'#title' => 'Имя',

);

return $form;

}

 

$form_state - зберігає всі дані введені користувачем

field_id - назва елемента форми (ключ).

$form_state->getValue('field_id');

 

Для отримання всіх значень використовується наступний метод:

$values = $form_state->getValues();

Саме зараз ми можемо перевірити значення введені користувачем на відповідність певним критеріям, які нас задовільняють:

public function validateForm(array &$form, FormStateInterface $form_state) {
  // Перевіряємо textfield чи має мінімум 7 символи
  // для того щоб поле рахувалось валідним.
  if (strlen($form_state->getValue('name')) < 7) {
    // Якщо користувач ввів замалу стрічку - менше 7 літер, то встановлюємо помилку
    // на елементі форми 'name' з потрібним нам текстом.
    // Якщо хочете щоб помилка перекладалась, використовуйте $this->t('').
    $form_state->setErrorByName('name', 'Поле "Ім'я" не може бути менше 7 символів');
  }
}

 

Відправка введених користувачем даних да подальша їх обробка

public function submitForm(array &$form, FormStateInterface $form_state) {
  // Виводиво нейм із форми
  drupal_set_message($this->t('Your name is @name', array('@name' => $form_state->getValue('name'))));
}

Категорія