Я обновил один из моих модулей Drupal 7 до 8, и у меня возникла проблема с изменением формы. Я добавляю функцию проверки и обработчик отправки. Функция проверки вызывается просто отлично, но функция отправки не запускается. Мне интересно, означает ли это, что существует подход в стиле Symfony, который необходимо использовать для добавления обработчиков отправки в существующие формы. Я много искал и не могу найти никаких примеров. Также просмотрел некоторые модули D8, находящиеся в стадии разработки, но я не нашел там ни одного рабочего примера.
Кто-нибудь знает, как правильно сделать это на Drupal 8?
Ответы:
В соответствии с примером в документации, он такой же, как для Drupal 7:
Вы можете найти похожую (рабочую) логику в
contact_form_user_form_alter()
editor_form_filter_format_form_alter()
locale_form_language_admin_edit_form_alter()
И еще несколько других.
источник
Вы можете добавить, сколько обработчиков отправки вы хотите, используя следующий код:
Если вы хотите добавить обработчик отправки после обработчика отправки по умолчанию (обработчик отправки, который будет вызываться после обратного вызова отправки), вы можете использовать следующее.
Чтобы удалить обработчик отправки:
источник
Поведение либо меняется, либо отличается от случая к случаю. С формой подтверждения удаления нескольких узлов
Код @ Clive заставляет Drupal игнорировать основной обработчик. В этом случае добавьте обработчик в
$form['#submit']
раздел:источник
Вот как прикрепить пользовательский обработчик отправки к форме добавления / редактирования узла статьи в Drupal 8:
Я не смог успешно добавить собственный обработчик отправки
$form['#submit']
и правильно запустить функцию. При создании новой статьи мне пришлось явно прикрепить ее к кнопке « Сохранить и опубликовать» и прикрепить к кнопке « Сохранить и опубликовать» при редактировании существующей статьи.Кроме того
publish
, вот некоторые другие доступные действия кнопки:источник
my_module_node_article_form_submit($form, FormStateInterface $form_state
дал мнеTypeError: Argument 2 passed to _ccad_content_log_webform_submit() must be an instance of FormStateInterface, instance of Drupal\Core\Form\FormState given
; изменив его, чтобы_submit($form, $form_state)
исправить ошибки.