سؤال

لقد أضفت بعض الحقول المخصصة إلى نموذج مجموعة العملاء باستخدام upgradeSchema.php.

بعد ذلك وجدت أن الحقول الأصلية مثل رمز مجموعة العملاء والمعرف الضريبي يتم حفظها باستخدام طرق الضبط في واجهة برمجة التطبيقات المتوفرة.إنه مختلف تمامًا عن Magento 1.X الذي يستخدم فقط setXXX() للحفظ.

هل كانت مفيدة؟

المحلول

يجب استخدام آلية سمات الامتداد في هذه الحالة.يسمح بتوسيع واجهات برمجة التطبيقات الأساسية بواسطة وحدات الطرف الثالث.الخطوات العامة لتمكين سمة الامتداد الجديدة:

  1. قم بتعريف سمة الامتداد كما هو موضح في ملف المستندات الرسمية.بعد المقاصة var و الركض <project_root>/bin/magento setup:di:compile, ، يجب أن تظهر أداة الضبط و getter المقابلة لهذه السمة الجديدة في \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\GroupInterface. setMyAttribute() يمكن استخدامها كذلك

فيما يلي مثال للتكوين الذي يجب وضعه عليه 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>

نصائح أخرى

لا تنس أن الوحدة تحتاج إلى register.php الملف فيه، ويجب عليك استخدام bin/magento module:enable VendorName_ModuleName قبل أن تظهر!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top