Magento 2 วิธีการบันทึกฟิลด์ที่กำหนดเองเพิ่มเข้ามาในรูปแบบของกลุ่มลูกค้า?


9

upgradeSchema.phpฉันได้เพิ่มฟิลด์ที่กำหนดเองบางอย่างเพื่อให้รูปแบบของกลุ่มลูกค้าโดยใช้

หลังจากนั้นฉันพบว่ามีการบันทึกฟิลด์ดั้งเดิมเช่นรหัสกลุ่มลูกค้าและรหัสภาษีโดยใช้วิธีการตั้งค่าใน API ที่ให้ไว้ มันแตกต่างอย่างสิ้นเชิงจาก Magento 1.X ที่ใช้ setXXX () เพื่อบันทึก


ฉันได้ลองใช้ \ Magento \ ลูกค้า \ Api \ Data \ GroupInterface $ customerGroup-> setData ('program_type', $ programType); program_type สอดคล้องกับคอลัมน์ตาราง 'program_type' เพื่อบันทึกลงในฐานข้อมูล แต่ล้มเหลว
Ricky.C

ฉันควรเขียน API แบบกำหนดเองด้วย getter และ setter เพื่อบันทึกฟิลด์หรือไม่
Ricky.C

คำตอบ:


23

ควรใช้กลไกส่วนขยายแอตทริบิวต์ในกรณีนี้ อนุญาตให้ขยาย API หลักโดยโมดูลของบุคคลที่สาม ขั้นตอนทั่วไปสำหรับการเปิดใช้งานแอตทริบิวต์ส่วนขยายใหม่:

  1. แอตทริบิวต์การขยายประกาศที่อธิบายไว้ในเอกสารอย่างเป็นทางการ หลังจากการล้างvarและเรียกใช้<project_root>/bin/magento setup:di:compilesetter และ 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\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 แต่ไม่มีการสร้างส่วนต่อประสานใหม่ ป.ล. ฉันได้ลบโฟลเดอร์สร้างและเรียกใช้การดำเนินการบางอย่าง .....
Ricky.C

extension_attribute.xml ของฉัน: <? xml version = "1.0"?> <config> <extension_attributes สำหรับ = "Magento \ Customer \ Api \ Data \ GroupInterface"> <attribute code = "group_domain" type = "string" /> </ extension_attributes> </config>
Ricky.C

ไฟล์ควรจะเรียกว่า extension_attributes.xml (พหูพจน์) ลองเรียกใช้การสร้างเอนทิตีที่สร้างอัตโนมัติทั้งหมดโดยใช้ CLI
Alex Paliarush

ขออภัยสำหรับความผิดพลาดในความคิดเห็นด้านบนไฟล์ที่ฉันมีจริงๆคือ extension_attributes.xml
Ricky.C

ฉัน googled แต่ไม่พบอะไรเลย คุณช่วยบอกฉันทีว่าควรใช้คำสั่งใด? ฉันเป็นผู้มาใหม่ที่ไม่คุ้นเคยกับ cli ขอบคุณ
Ricky.C

2

อย่าลืมว่าโมดูลต้องการregister.phpไฟล์ภายในและคุณต้องใช้bin/magento module:enable VendorName_ModuleNameก่อนที่จะปรากฏขึ้น!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.