Я пытаюсь создать форму с двумя кнопками отправки, и каждая кнопка будет использовать другую функцию: по умолчанию представить форму функция и обычай отправитьформендсессион функция. Итак, у меня есть этот код:
класс 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 правильно и без входа в обе функции, когда мы нажимаем на одну кнопку.
Спасибо и хорошего дня!