Form API Flashcards
- Как создать форму?
Формы в 8 версии представлены интерфейсом \Drupal\Core\Form\FormInterface[1].
Данный интерфейс содержит методы:
getFormId() — возвращает уникальное имя формы.
buildForm() — метод, в котором определяются элементы формы.
validateForm() — метод проверки формы перед сабмитом. Содержит логику фильтрации/проверки данных, введенных в форму.
submitForm() — сабмит формы. Обрабатывает и сохраняет провалидированные данные.
От вышеупомянутого интерфейса реализуются все остальные классы форм, какие-то используют его непосредственного, другие через базовые классы. Базовые абстрактные классы содержатся в ядре и предназначены для создания разных типов форм. Эти классы содержат более проработанную структуру и упрощают создание собственных.
FormBase[2] — базовый класс для всех форм. Реализует интерфейсы FormInterface и ContainerInjectionInterface.
ConfigFormBase[3] — базовый класс для создания системных конфигурационных форм, таких как, например, на странице Performance по адресу admin/config/development/performance. Наследуется от FormBase.
ConfirmFormBase[4] — базовый класс для создания форм подтверждения. Наследуется от FormBase и реализует интерфейс ConfirmFormInterface.
- Создание AJAX-форм, свойство #ajax.
Создайте новую форму или используйте hook_form_alter, чтобы изменить существующую форму.
Добавьте элемент рендеринга ‘#ajax’ в поле, которое должно запускать функцию обратного вызова.
Определите имя функции обратного вызова и тип события, которое вызовет ее.
Когда событие запускается путем изменения значения поля формы, вызывается функция обратного вызова.
Функция обратного вызова позволяет получить доступ к массиву $ form и FormstateInterface и должна, наконец, вернуть массив рендеринга или некоторую разметку html или может выполнить команду AJAX.
- Использование #states.
Зависимое поле – поле, которое принимает любое из состояний формы, например как скрытие или показ.
Влияющее поле – поле, от которого зависит состояние зависимого поля.
Итак, что бы Drupal понимал, что для зависимого поля необходимо отслеживать состояние, то для данного поля необходимо предать в массив с ключом «#states» необходимое состояние элемента формы, а так же ID влияющего поля с необходимым значением данного (влияющего) поля.
‘#states’ => array( // сказали Drupal, что для данного поля необходимо отслеживать состояние
‘visible’ => array( // указали необходимое состояние
‘:input[name=”field_select”]’ => array(‘value’ => 1), // указали имя влияющего поля поля и его значение, при котором данное состояние должно сработать
- Как подключить к форме library?
Объявить свой js файл в *.libraries.yml файле своего модуля, а потом добавить JS к форме
$form[‘#attached’][‘library’][] = ‘yourmodule/yourlibrary’;