Yanıtlar:
Kullanmalısınız $form_state->getTriggeringElement()
.
En iyi yöntem, #name
düğ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_element
düğ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_state
Drupal 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 readOnly
yalnızca genişleyen sınıfların FormStateInterface
değ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()
.