Je veux obtenir triggering_element
élément sur form_alter
après la reconstruction du formulaire, je sais également que cela pourrait être utilisé sur le gestionnaire de soumission sur le contrôleur Ajax pour savoir quel élément cause la soumission du formulaire ou Ajax déclenché.
Alors, comment puis-je obtenir triggering_element après un appel Ajax ou des soumissions de formulaire?
Eyal a raison. FormState a une méthode getTriggeringElement . Voir enregistrement de modification d'origine pour plus de détails.
$form_state->getTriggeringElement();
et si vous voulez vous identifier, essayez
$triggerdElement = $form_state->getTriggeringElement();
$htmlIdofTriggeredElement = $triggerdElement['#id'];
Ma méthode préférée est:
$triggering_element = $form_state->getTriggeringElement();
$button_name = $triggering_element['#name'];
if ($button_name === 'button1') {
// ...
}
Fonctionne à la fois pour validateForm () et submitForm ().
Assurez-vous d'avoir #nom pour tous vos boutons. Par exemple.:
$form['button1'] = [
'#type' => 'submit',
'#name' => 'button1',
'#value' => $this->t('Button 1'),
];
Comparé à $ triggering_element ['# id'], il est plus stable car #id est généré automatiquement et peut changer implicitement.
Comparé à $ triggering_element ['# value'], c'est mieux parce que:
- #value peut ne pas être unique;
- #value est une interface utilisateur de partie (étiquette de bouton) et change fréquemment.
$triggering_element = $form_state->getTriggeringElement();
$button_name = $triggering_element['#name'];
if ($button_name === 'button1') {
// ...
}
Fonctionne à la fois pour validateForm () et submitForm ().
Assurez-vous d'avoir #nom pour tous vos boutons. Par exemple.:
$form['button1'] = [
'#type' => 'submit',
'#name' => 'button1',
'#value' => $this->t('Button 1'),
];
Ceci est la bonne réponse.