Magento 2 कस्टमर ग्रुप के रूप में जोड़े गए कस्टम फील्ड को कैसे सेव करें?


9

मैंने उपयोग करके ग्राहक समूह के रूप में कुछ कस्टम फ़ील्ड जोड़े हैं upgradeSchema.php

उसके बाद मैंने पाया कि ग्राहक समूह कोड और टैक्स आईडी जैसे मूल क्षेत्र प्रदान की गई एपीआई में सेटर विधियों का उपयोग करके सहेजे जाते हैं। यह Magento 1.X से पूरी तरह से अलग है कि बस को बचाने के लिए setXXX () का उपयोग करें।


मैंने \ Magento \ Customer \ Api \ Data \ GroupInterface $ customerGroup-> setData ('program_type', $ programType) का उपयोग करने की कोशिश की है; program_type डेटाबेस में सहेजने के लिए तालिका स्तंभ 'program_type' के समान है, लेकिन विफल रहा।
रिकी .C

क्या मुझे खेतों को बचाने के लिए गटर और सेटर के साथ एक कस्टम एपीआई लिखना चाहिए?
रिकी .C

जवाबों:


23

विस्तार गुण तंत्र का उपयोग इस मामले में किया जाना चाहिए। यह 3 जी मॉड्यूल द्वारा कोर एपीआई के विस्तार की अनुमति देता है। नई एक्सटेंशन विशेषता को सक्षम करने के लिए सामान्य चरण:

  1. आधिकारिक डॉक्स में वर्णित विस्तार विशेषता को घोषित करें । समाशोधन varऔर चलने के बाद <project_root>/bin/magento setup:di:compile, इस नई विशेषता के लिए संबंधित सेटर और गेट्टर को प्रकट होना चाहिए \Magento\Customer\Api\Data\GroupExtensionInterface(यह इंटरफ़ेस ऑटो-जनरेट किया गया है)
  2. के लिए लिखें प्लगइन्स \Magento\Customer\Api\GroupRepositoryInterface::save, \Magento\Customer\Api\GroupRepositoryInterface::getById(और आवश्यक के रूप में किसी अन्य सेवा विधि) को बचाने के लिए / लोड नई विशेषता। एक एक्सटेंशन डेवलपर के रूप में, केवल आप जानते हैं कि यह विशेषता कहाँ संग्रहीत होनी चाहिए, कोई भी तालिका हो सकती है। \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSaveएक उदाहरण के रूप में देखें
  3. यदि आपको इस विशेषता को संग्रह (दृश्यमान / फ़िल्टर करने योग्य बनाने) में दृश्यमान बनाने की आवश्यकता है, तो joinनोड घोषित करें । यदि नहीं, तो बस इसे छोड़ें
  4. अपने कस्टम विशेषता को इस रूप में एक्सेस करें: $customerGroup->getExtensionAttributes()->getMyAttribute()जहां customerGroupलागू होता है \Magento\Customer\Api\Data\GroupInterfacesetMyAttribute()के रूप में अच्छी तरह से इस्तेमाल किया जा सकता है

नीचे विन्यास का उदाहरण दिया गया है जिसे लगाना चाहिए VendorName/ModuleName/etc/extension_attributes.xml

<?xml version="1.0"?>
<config>
    <extension_attributes for="Magento\Customer\Api\Data\GroupInterface">
        <!--Data interface can be used as a type of attribute, see example in CatalogInventory module-->
        <attribute code="name_of_attribute" type="string">
            <resources>
                <resource ref="VendorName_ModuleName::someAclNode"/>
            </resources>
            <!--Join is optional, only if you need to have added attribute visible in groups list-->
            <join reference_table="table_where_attribute_is_stored" reference_field="group_id_field_in_that_table" join_on_field="group_id">
                <field>name_of_added_attribute_field_in_that_table</field>
            </join>
        </attribute>
    </extension_attributes>
</config>

मैंने extension_attributes.xml जोड़ने की कोशिश की, लेकिन कोई नया इंटरफ़ेस उत्पन्न नहीं हुआ है। पी एस मैंने पीढ़ी फ़ोल्डर को हटा दिया है और कुछ ऑपरेशन का आह्वान किया है .....
रिकी। सी।

मेरा extension_attribute.xml: <? Xml संस्करण = "1.0"?> <Config> <extension_attributes for = "Magento \ Customer \ Api \ Data \ GroupInterface"> <विशेषता कोड = "group_domain" प्रकार = "string" /> </ extension_attributes> </ config>
Ricky.C

फ़ाइल को extension_attributes.xml (बहुवचन) कहा जाना चाहिए। सीएलआई का उपयोग करके सभी ऑटोजेनरेटेड संस्थाओं की पीढ़ी को आमंत्रित करने का प्रयास करें।
एलेक्स पालीरुश

उपरोक्त टिप्पणी पर टाइपो के लिए खेद है, मेरे पास जो फाइल है वह वास्तव में extension_attributes.xml है
रिकी। C

मैंने गुगली की है, लेकिन कुछ नहीं पाया। क्या आप मुझे बता सकते हैं कि किस कमांड का उपयोग किया जाना चाहिए? मैं एक नया कॉमरेड हूं जो क्ली से परिचित नहीं है। धन्यवाद।
रिकी। C

2

मत भूलो कि एक मॉड्यूल को इसमें एक register.phpफ़ाइल की आवश्यकता है , और bin/magento module:enable VendorName_ModuleNameइसे दिखाने से पहले आपको इसका उपयोग करना चाहिए !

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.