Antworten:
Sie müssen die triggering_element
von der verwenden $form_state['triggering_element']
.
Es wird empfohlen, ein #name
Attribut für Ihre Schaltfläche zu definieren , damit Sie diesen Wert in der Liste haben triggering_element
.
Beispielsweise:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
Wenn Sie dieses Attribut nicht definieren, triggering_element
werden die Schaltflächen #value
(der Text, den der Benutzer lesen kann) beibehalten. Dies wird jedoch nicht empfohlen, da andere Module diesen Wert möglicherweise ändern oder von der Lokalisierung geändert werden.
Sie können auch verwenden $form_state['clicked_button']
, dies ist jedoch veraltet .
Weitere Informationen finden Sie auf der Dokumentationsseite für die Funktion drupal_build_form .
$form_state['clicked_button']['#value']
Hier erfahren Sie, welche Schaltfläche im Formular angeklickt wurde.
$form_state['clicked_button']['#value']
:)
Vergleichen Sie diese Werte mit $form_state
denen, die ich in Drupal 6 gemacht habe und die in Drupal7 gleich wären
if($form_state['values']['ok'] == $form_state]['clicked_button']['#value']){
//Process if OK is pressed
}else if($form_state['values']['cancel'] == $form_state]['clicked_button']['#value']) {
//Process if Cancel is pressed
}
Benennen Sie die Schaltflächen mit dem #name
Attribut wie folgt:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
und dann benutze:
$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
Für diejenigen, die immer noch herausfinden möchten, wie sie auf das ausgelöste Ereignis zugreifen können, ist hier die Drupal 8-Lösung.
$form_state->getTriggeringElement()
Dies gibt das Array des auslösenden Submit-Elements zurück. Wenn Sie ein aufgerufenes Markup hinzufügen, können #name
Sie folgendermaßen darauf zugreifen.
$button_clicked = $form_state->getTriggeringElement()['#name']
Der Grund für diese Änderung ist, dass FormStateInterface
es sich nun um eine readOnly
Datei handelt, in der nur Klassen, die sich erweitern, FormStateInterface
auf die Variablen zugreifen können. Sie müssen also getTriggeringElement()
Zugriffsmethoden wie verwenden, um auf die Variable zuzugreifen.
In Drupal 8.4.4 $form_state->getTriggeringElement()['#name'];
gibt Ihnen der Wert von op
. Wenn Sie im #value
Wertearray des Formularstatus nach diesem Schlüssel suchen, erhalten Sie den Schlüssel des Formularelements button - mit anderen Worten, die Zeichenfolge, die der Endbenutzer auf der Schaltfläche auf der Seite sieht.
Ich weiß nicht, ob $form_state->getValues()['op']
es für alle Formen universell ist, aber ich codiere es fest in der Form meines Moduls.
Drupal 8.6.7
Erstellen Sie eine Schaltfläche wie unten.
$form['my_button'] = [
'#type' => 'button',
'#value' => t('Custom Button'),
'#name' => t('customButton'),
'#weight' => 0,
'#attributes' => [
'class' => ['populate-bib-button', 'btn', 'btn-primary'],
],
];
In Ihrer Submit-Funktion erhalten Sie den Namen der Schaltfläche wie unten angegeben.
$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton
Vergleiche können gerne gemacht werden
if ($input['_triggering_element_name'] == 'customButton') {
// Do something.
}
# Drupal8
hook_submit()
einem Formularübermittlungs-Handler? Ein Formularübergabehandler ist nicht die Implementierung vonhook_submit()
.