Î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ă!