Yanıtlar:
Kullanmalısınız $form_state->getTriggeringElement().
En iyi yöntem, #namedüğmeniz için bir özellik tanımlamaktır , böylece bu değeri triggering_element.
Örneğin:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
Bu örnekte:
$form_state->getTriggeringElement()['#name']içinde çağrıldığında "sil" ifadesini döndürürpublic function submitForm(&$form, $form_state)
Bu özniteliği tanımlamazsanız triggering_elementdüğmenin #value(kullanıcının okuyabileceği metin) tutacağı , ancak diğer modüllerin bu değeri değiştirebileceği veya yerelleştirme ile değiştirilebileceği için bu önerilmez.
Siz de kullanabilirsiniz $form_state['clicked_button'], ancak bu kullanımdan kaldırılmıştır .
Daha fazla bilgi için drupal_build_form işlevi dokümantasyon sayfasını okuyabilirsiniz .
$form_state['clicked_button']['#value'] formda hangi düğmenin tıklandığını söyleyecektir.
$form_state['clicked_button']['#value']:)
$form_stateDrupal 6'da yaptığım bu değerleri karşılaştırın ve Drupal7'de aynı olurdu
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
}
Düğmeleri #nameözniteliğe şu şekilde adlandırın:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
ve sonra şunu kullanın:
$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
Hala tetiklenen olaya nasıl erişileceğini anlamaya çalışanlar için Drupal 8 çözümü.
$form_state->getTriggeringElement()
Bu, tetikleyici gönderme öğesinin dizisini döndürür. Çağrılan bir işaretleme eklerseniz #name, buna şu şekilde erişirsiniz.
$button_clicked = $form_state->getTriggeringElement()['#name']
Bu değişikliğin arkasındaki neden FormStateInterface, artık readOnlyyalnızca genişleyen sınıfların FormStateInterfacedeğişkenlere erişebileceği bir dosya olmasıdır . Bu nedenle getTriggeringElement(), değişkene erişmek için gibi erişimci yöntemlerini kullanmanız gerekir .
Drupal 8.4.4 $form_state->getTriggeringElement()['#name'];size değerini verir op. Bu anahtarı form durumunun değerler dizisinde aradığınızda #value, düğme form öğesinin anahtarını alırsınız - başka bir deyişle, son kullanıcıların sayfadaki düğmede gördüğü dize.
$form_state->getValues()['op']Tüm formlar için evrensel olup olmadığını bilmiyorum , ancak modülümün formunda zor kodluyorum.
Drupal 8.6.7
Düğme aşağıdaki gibi bir şey oluşturun.
$form['my_button'] = [
'#type' => 'button',
'#value' => t('Custom Button'),
'#name' => t('customButton'),
'#weight' => 0,
'#attributes' => [
'class' => ['populate-bib-button', 'btn', 'btn-primary'],
],
];
Gönderme fonksiyonunuzda aşağıdaki kod gibi düğme adı alın.
$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton
Karşılaştırma şöyle yapılabilir
if ($input['_triggering_element_name'] == 'customButton') {
// Do something.
}
# Drupal8
hook_submit()Form gönderme işleyicisinden mi bahsediyorsunuz ? Form gönderme işleyicisi uygulaması değildirhook_submit().