आप हुक_फॉर्म_ल्टर () में कस्टम सबमिट हैंडलर कैसे लागू करते हैं?


15

मैं अपने ड्रुपल 7 मॉड्यूल में से एक को 8 में अपडेट कर रहा हूं और मुझे अपने फॉर्म में बदलाव के साथ एक समस्या हो रही है। मैं एक सत्यापन समारोह और एक सबमिट हैंडलर जोड़ रहा हूं। सत्यापन फ़ंक्शन को ठीक कहा जा रहा है, लेकिन सबमिट फ़ंक्शन को निकाल नहीं दिया जा रहा है। मैं सोच रहा था कि इसका मतलब यह है कि एक सिम्फनी-शैली दृष्टिकोण है जिसे मौजूदा रूपों में सबमिट हैंडलर को जोड़ने की आवश्यकता है। मैंने बहुत खोज की है और मुझे कोई उदाहरण नहीं मिला। इसके अलावा कुछ काम में प्रगति D8 मॉड्यूल के माध्यम से देखा, लेकिन मैं वास्तव में वहाँ किसी भी काम के उदाहरण नहीं मिला है।

क्या किसी को भी इस बात का कोई अंदाजा नहीं है कि ऐसा करने का सही Drupal 8 तरीका क्या है?


2
आपको अपना मौजूदा कोड पोस्ट करना चाहिए ताकि लोग इस पर नज़र डाल सकें और किसी भी मुद्दे को हल कर सकें / विकल्प सुझा सकें।
यूरी बबेंको

डी 8 बीटा 9 के रूप में, हैंडलर जमा करने के लिए गेटर्स और सेटर हैं, लेकिन मैं उन्हें काम करने के लिए नहीं मिला और नीचे दिए गए उत्तर का उपयोग कर सकता हूं। मुझे उम्मीद है कि नोड इंटरफ़ेस भविष्य में कुछ घटनाओं को भेजा जाएगा, क्योंकि मैं एक हुक का उपयोग करने के बजाय एक घटना की सदस्यता लूंगा।
एलेक्स फिनारन

जवाबों:


13

प्रलेखन में उदाहरण के अनुसार यह Drupal 7 के लिए समान है:

$form['actions']['submit']['#submit'][] = 'mymodule_upload_enabled_types_submit';

आप समान (काम कर रहे) तर्क खोज सकते हैं

और इसके अलावा कुछ अन्य।


1
मैं एपीआई डॉक्स के साथ बहस नहीं कर सकता। शायद मेरे कार्यान्वयन के साथ कुछ पेचीदा, मैं गहरी खुदाई करूँगा।
Arbee

$ $ ['कार्रवाई'] ['सबमिट'] से अलग मेरा अपडेट देखें, वहाँ भी $ फॉर्म ['कार्रवाई'] ['प्रकाशित करें'] और ['अप्रकाशित'] अनुभाग हैं जो संलग्न हैंडलर जमा कर सकते हैं।
Arbee

मुझे अपने सबमिट हैंडलर के लिए $ फॉर्म ['एक्शन'] ['पब्लिश'] ['# सबमिट'] [] के बजाय $ फॉर्म ['एक्शन ’] [' सबमिट’] [submit # सबमिट ’] [] का उपयोग करना पड़ा। नोड प्रकाशित होने पर काम करने के लिए। हालाँकि, जब नोड पहले अप्रकाशित के रूप में सहेजा जाता है, तो मुझे कॉलबैक काम करने के लिए प्रतीत नहीं हो सकता है।
एलेक्स फिनारन

6

आप निम्नलिखित कोड का उपयोग करके कितने सबमिट हैंडलर जोड़ सकते हैं:

 $form['actions']['submit']['#submit'][] = 'mymodule_what_ever_function';

यदि आप डिफॉल्ट सबमिट हैंडलर के बाद सबमिट हैंडलर जोड़ना चाहते हैं , (सबमिट हैंडलर जिसे सबमिट कॉलबैक के बाद कॉल किया जाएगा), तो आप निम्न का उपयोग कर सकते हैं।

$form['#submit'][1] = test_function;

सबमिट हैंडलर निकालने के लिए:

unset($form["actions"]['submit']);

3

व्यवहार या तो बदला हुआ है या मामले से अलग है। नोड हटाएं के साथ कई पुष्टिकरण फ़ॉर्म

$form['actions']['submit']['#submit'][] = 'mymodule_upload_enabled_types_submit';

@ क्लाइव का कोड Drupal को मुख्य हैंडलर को अनदेखा करने का कारण बनता है। इस मामले में $form['#submit']अनुभाग में हैंडलर जोड़ें :

$form['#submit'][] = 'mymodule_upload_enabled_types_submit';

1

यहाँ Drupal 8 में लेख नोड जोड़ने / संपादित करने के लिए एक कस्टम सबमिट हैंडलर संलग्न करने का तरीका बताया गया है:

<?php

use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_alter().
 */
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  // Use this to reveal the form id.
  //drupal_set_message($form_id);

  // Use this with the devel module to inspect the button action(s).
  //kint($form['actions']);

  switch ($form_id) {

    case 'node_article_form':      // New article nodes.
    case 'node_article_edit_form': // Existing article nodes.

      // Attach our custom submit handler.
      $form['actions']['publish']['#submit'][] = 'my_module_node_article_form_submit';
      break;

  }

}

function my_module_node_article_form_submit($form, FormStateInterface $form_state) {
  drupal_set_message('Running custom submit handler...');
}

मैं $form['#submit']फंक्शन को सफलतापूर्वक सबमिट करने के लिए और फंक्शन फायर को ठीक से करने में सक्षम नहीं था । मैं था स्पष्ट रूप से करने के लिए इसे संलग्न करने के लिए सहेजें और प्रकाशित करें जब एक नया लेख बनाने बटन, और के लिए देते सहेजें और प्रकाशित रखने के बटन जब एक मौजूदा लेख का संपादन।

इसके अलावा publish, यहां कुछ अन्य बटन उपलब्ध हैं:

unpublish
preview
delete

मैं ड्रुपल 8.7.3 में हूं, और my_module_node_article_form_submit($form, FormStateInterface $form_stateमुझे दिया TypeError: Argument 2 passed to _ccad_content_log_webform_submit() must be an instance of FormStateInterface, instance of Drupal\Core\Form\FormState given; इसे _submit($form, $form_state)त्रुटियों को ठीक करने के लिए बदल रहा है ।
user1359
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.