रूपों में अजाक्स के साथ काम करते समय आपको निम्नलिखित बातों को ध्यान में रखना होगा:
यह जान लें कि क्या आप पूरे फॉर्म या उसके हिस्से को फिर से बना रहे हैं और उस डिव एलिमेंट के अनुसार फॉर्म को रैप करें, जिसमें ID एट्रिब्यूट हो, जिसे आप # रैजैक्स डेफिनिशन में ट्रिगर रैपर के रूप में इस्तेमाल करेंगे। इसके लिए #prefix और #suffix विशेषताओं का उपयोग करें ( $form['#prefix'] = '<div id="myform-ajax-wrapper">'; $form['#suffix'] = '</div>';
)। यह भी ध्यान रखें कि यदि आपके पास आपके फॉर्म के लिए कस्टम टेम्पलेट है तो इस मामले में उपसर्ग और प्रत्यय को प्रस्तुत न करें ( {{ form|without('#prefix', '#suffix') }}
अन्यथा) वे दो बार प्रदान करेंगे - आपके टेम्पलेट द्वारा और फॉर्म थीम रैपर द्वारा भी। आप इसे खाली सरणी में #theme_wrappers सेट करके नहीं रोक सकते क्योंकि फॉर्म टेम्पलेट में वास्तविक फॉर्म html एलिमेंट है।
अपने अजाक्स सबमिट हैंडलर में, उस पूरे फॉर्म या हिस्से को लौटाएं जिसे आपने लपेटा है और पुनर्निर्माण ( return $form
या return $form['myelement']
) करना चाहते हैं । आप केवल संरचना संरचना को वापस करने के बजाय ajax कमांड का उपयोग कर सकते हैं, लेकिन यह अधिक उन्नत सामान है।
फॉर्म जमा करने तक हर मूल्य को राज्य के स्टोरेज में जमा करें। इसे सबमिट हैंडलर ( $form_state->set('somevalue', $form_state->getValue('somevalue'))
) में करें और हमेशा कॉल करें $form_state->setRebuild()
यदि आप अंतिम फॉर्म जमा नहीं कर रहे हैं। मैं कस्टम सबमिट हैंडलर रखना पसंद करता हूं लेकिन प्राथमिक सबमिट हैंडलर में अधिक तर्क होने के साथ-साथ पूरी तरह से ठीक है।
हमेशा #name
उस बटन पर विशेषता का उपयोग करें जो सबमिशन कर रहा हो और यदि आपके पास केवल एक फॉर्म सबमिट हैंडलर का उपयोग $for_state->getTriggeringElement()['#name']
हो तो यह पता लगाने के लिए कि किस तत्व ने फॉर्म जमा किया है।
यदि आप #ajax परिभाषा में 'trig_as' का उपयोग कर रहे हैं, तो उदाहरण के लिए, आप चुनिंदा तत्व के साथ फ़ॉर्म सबमिट करना चाहते हैं, हमेशा उसी #ajax परिभाषा का उपयोग करें जैसे आप बटन पर करते हैं। मेरे अनुभव में यह आवश्यक है - हालांकि दस्तावेज में नहीं बताया गया है।
उपयोग #limit_validation_errors
करने से कभी-कभी बहुत मुश्किल हो सकता है और यह पता लगाने के लिए कि फॉर्म क्यों काम नहीं कर रहा है, इसमें कुछ समय लग सकता है, इसलिए इसे सावधानी से उपयोग करें (यह केवल तत्व (ओं) पर फॉर्म की त्रुटियों को अलग करने के लिए अच्छा है कि आप वास्तव में पुनर्निर्माण कर रहे हैं ताकि आपका कोड हो फार्म के अन्य भागों को प्रभावित नहीं करता है)।
फ़ॉर्म सबमिट करने के लिए हमेशा बटनों का उपयोग करें और यदि आप कुछ फैंसी होना चाहते हैं, जैसे कि ट्रिगरिंग तत्व का चयन करें, तो #ajax कॉन्फ़िगरेशन के 'ट्रिगर_पास' विकल्प का उपयोग करें और अच्छे UI के लिए 'js-hide' वर्ग के साथ वास्तविक बटन को छिपाएं।
फॉर्म की परिभाषा में, फॉर्म स्टेट की स्टोरेज से डिफ़ॉल्ट मान प्राप्त करें यदि वे मौजूद हैं या नहीं तो उन्हें स्टोरेज में असाइन करें। अन्यथा फॉर्म ठीक से काम नहीं करेगा।
इस $ या कुछ और का उपयोग न करें जो आपके पास बाहरी रूप से उपयोग नहीं है, अन्यथा यह अजाक्स को तोड़ देगा। हमेशा स्थिर अजाक्स हैंडलर का उपयोग करें।
जब आप फॉर्म जमा करते हैं, तो इस तथ्य पर निर्भर करता है कि आपके पास (नहीं) अजाक्स के लिए कस्टम फॉर्म सबमिशन हैंडलर है, कॉल करके फॉर्म पुनर्निर्माण को अक्षम करें $form_state->setRebuild(FALSE)
।
आप ajax प्रस्तुत तत्व ( $element['#ajax']['callback'] = '::ajaxFormRebuild';
और $element['#submit'] = [['::ajaxFormSubmitHandler'];
) में :: आशुलिपि कॉल का उपयोग कर सकते हैं ।
अजाक्स कॉलबैक विशुद्ध रूप से पुनर्निर्माण फॉर्म या अजाक्स कमांड को वापस करने के लिए है। कभी भी परिवर्तित रूप न लौटें (यानी इस कॉलबैक में फ़ॉर्म सरणी को न बदलें)।