जवाबों:
आप triggering_element
से उपयोग करना चाहिए $form_state['triggering_element']
।
सबसे अच्छा अभ्यास #name
आपके बटन के लिए एक विशेषता को परिभाषित करना है , इसलिए आपके पास यह मान हो सकता है triggering_element
।
उदाहरण के लिए:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
यदि आप परिभाषित नहीं करते हैं तो यह विशेषता triggering_element
बटन #value
(उपयोगकर्ता द्वारा पढ़ा जा सकने वाला पाठ) को दबाए रखेगा , लेकिन यह हतोत्साहित किया जाता है क्योंकि अन्य मॉड्यूल इस मूल्य को बदल सकते हैं या स्थानीयकरण द्वारा बदल सकते हैं)।
आप भी उपयोग कर सकते हैं $form_state['clicked_button']
, लेकिन यह पदावनत है ।
आप drupal_build_form फ़ंक्शन प्रलेखन पृष्ठ पर अधिक जानकारी पढ़ सकते हैं ।
$form_state['clicked_button']['#value']
आपको बताएगा कि फॉर्म पर किस बटन पर क्लिक किया गया था।
$form_state['clicked_button']['#value']
:)
इन मूल्यों की तुलना $form_state
मैं Drupal 6 में कर रहा हूं और Drupal7 में भी यही होगा
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
}
बटन को #name
विशेषता के साथ नाम दें , जैसे:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
और फिर उपयोग करें:
$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
उन लोगों के लिए अभी भी यह पता लगाने की कोशिश की जा रही है कि यहाँ ट्रिगर की गई घटना का उपयोग कैसे किया जाए।
$form_state->getTriggeringElement()
यह ट्रिगर सबमिट तत्व का सरणी देता है। यदि आप एक मार्कअप जोड़ते हैं, #name
तो आप इसे निम्न तरीके से एक्सेस करेंगे।
$button_clicked = $form_state->getTriggeringElement()['#name']
इस परिवर्तन के पीछे कारण यह है कि FormStateInterface
अब एक readOnly
फ़ाइल है जिसमें केवल कक्षाएं जो विस्तारित होती FormStateInterface
हैं वे चर तक पहुंच सकते हैं। इसलिए आपको getTriggeringElement()
वेरिएबल एक्सेस करने के लिए एक्सेसर तरीके का उपयोग करना होगा।
Drupal में 8.4.4 $form_state->getTriggeringElement()['#name'];
आपको मूल्य देता है op
। जब आप प्रपत्र राज्य के मान सरणी में उस #value
कुंजी को खोजते हैं , तो आपको बटन फ़ॉर्म तत्व की कुंजी मिलती है - दूसरे शब्दों में, वह स्ट्रिंग जो अंतिम उपयोगकर्ता पृष्ठ पर बटन पर देखता है।
मुझे नहीं पता कि क्या $form_state->getValues()['op']
सभी रूपों के लिए सार्वभौमिक है, लेकिन मैं इसे अपने मॉड्यूल के रूप में हार्ड-कोडिंग कर रहा हूं।
Drupal 8.6.7
बटन को कुछ इस तरह बनाएं।
$form['my_button'] = [
'#type' => 'button',
'#value' => t('Custom Button'),
'#name' => t('customButton'),
'#weight' => 0,
'#attributes' => [
'class' => ['populate-bib-button', 'btn', 'btn-primary'],
],
];
आपके सबमिट फ़ंक्शन में नीचे दिए गए कोड की तरह बटन का नाम मिलता है।
$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton
तुलना की जा सकती है
if ($input['_triggering_element_name'] == 'customButton') {
// Do something.
}
# Drupal8
hook_submit()
एक फॉर्म सबमिट करने वाले हैंडलर की बात कर रहे हैं ? एक फॉर्म सबमिशन हैंडलर का कार्यान्वयन नहीं हैhook_submit()
।