Încerc să creez un formular cu două butoane de trimitere și fiecare buton va folosi o funcție diferită: cea implicită submitForm funcție și un obicei submitFormEndSession funcţie. Deci am acest cod:
clasa EndSessionForm extinde FormBase {
/**
* @var \Drupal
*/
private $drupal;
funcția publică __construct() {
$this->drupal = Drupal nou();
}
/**
* {@inheritdoc}
*/
funcția publică getFormId(): șir {
returnează „form_sesiune_final”;
}
funcția publică buildForm(array $form, FormStateInterface $form_state): matrice {
// ... unele câmpuri
$form['trimite'] = [
'#type' => 'trimite',
'#value' => 'Închideți sesiunea',
'#name' => 'btnEnd',
];
$form['stop'] = [
'#type' => 'trimite',
'#value' => 'Opriți sesiunea',
'#name' => 'btnStop',
];
returnează $form;
}
funcția publică submitForm(matrice &$form, FormStateInterface $form_state) {
// Funcție de apelat cu butonul btnEnd
}
funcția publică submitStopForm(matrice &$form, FormStateInterface $form_state) {
// Funcție de apelat cu butonul btnStop
}
}
In conformitate cu documentație din Drupal 9.2.x, singurul lucru pe care trebuia să-l fac a fost să adaug a #Trimite parametru la $form['stop'] element ca acesta:
$form['stop'] = [
'#type' => 'trimite',
'#value' => 'Opriți sesiunea',
'#name' => 'btnStop',
'#submit' => [ $this, 'submitStopForm' ] // link către a doua funcție de trimitere
]
Dar nu merge.
După multe încercări și cercetări, am găsit o soluție parțială adăugând aceasta în buildForm:
$form['#submit'][] = [$this, 'submitStopForm'];
Cele două butoane sunt acum legate la submitForm și submitStopForm, indiferent dacă pun o #Trimite parametru pe butoane sau nu, submitStopForm se execută mai întâi apoi submitForm. Dar mă întreb cum pot conecta primul buton la submitForm iar al doilea la submitStopForm corect și fără a intra în ambele funcții când facem clic pe un buton.
Mulțumesc și să ai o zi bună!