Я пытаюсь создать форму с двумя кнопками отправки, и каждая кнопка будет использовать другую функцию: по умолчанию представить форму
функция и обычай отправитьформендсессион
функция. Итак, у меня есть этот код:
класс EndSessionForm расширяет FormBase {
/**
* @var\Друпал
*/
приватный $друпал;
публичная функция __construct() {
$this->drupal = новый Drupal();
}
/**
* {@inheritdoc}
*/
публичная функция getFormId(): строка {
вернуть 'end_session_form';
}
общедоступная функция buildForm (массив $ form, FormStateInterface $ form_state): массив {
// ... некоторые поля
$ форма ['отправить'] = [
'#type' => 'отправить',
'#value' => 'Закрыть сеанс',
'#name' => 'btnEnd',
];
$ форма ['стоп'] = [
'#type' => 'отправить',
'#value' => 'Остановить сеанс',
'#name' => 'btnStop',
];
вернуть $ форму;
}
публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state) {
// Функция для вызова с помощью кнопки btnEnd
}
публичная функция submitStopForm (массив и $ форма, FormStateInterface $ form_state) {
// Функция для вызова с помощью кнопки btnStop
}
}
Согласно документация Drupal 9.2.x, единственное, что мне нужно было сделать, это добавить #представить
параметр к $ форма ['стоп']
такой элемент:
$ форма ['стоп'] = [
'#type' => 'отправить',
'#value' => 'Остановить сеанс',
'#name' => 'btnStop',
'#submit' => [ $this, 'submitStopForm' ] // ссылка на вторую функцию отправки
]
Но это не работает.
После многих попыток и исследований я нашел частичное решение, добавив это в билдформ
:
$form['#submit'][] = [$this, 'submitStopForm'];
Две кнопки теперь связаны с представить форму
и отправитьStopForm
, независимо от того, поставлю ли я #представить
параметр на кнопках или нет, отправитьStopForm
сначала выполняется затем представить форму
. Но мне интересно, как я могу связать первую кнопку с представить форму
а второй к отправитьStopForm
правильно и без входа в обе функции, когда мы нажимаем на одну кнопку.
Спасибо и хорошего дня!