ควรใช้กลไกส่วนขยายแอตทริบิวต์ในกรณีนี้ อนุญาตให้ขยาย API หลักโดยโมดูลของบุคคลที่สาม ขั้นตอนทั่วไปสำหรับการเปิดใช้งานแอตทริบิวต์ส่วนขยายใหม่:
- แอตทริบิวต์การขยายประกาศที่อธิบายไว้ในเอกสารอย่างเป็นทางการ หลังจากการล้าง
var
และเรียกใช้<project_root>/bin/magento setup:di:compile
setter และ getter ที่สอดคล้องกันสำหรับแอตทริบิวต์ใหม่นี้ควรปรากฏใน\Magento\Customer\Api\Data\GroupExtensionInterface
(อินเทอร์เฟซนี้สร้างขึ้นโดยอัตโนมัติ)
- ปลั๊กอินสำหรับเขียน
\Magento\Customer\Api\GroupRepositoryInterface::save
, \Magento\Customer\Api\GroupRepositoryInterface::getById
(และวิธีการบริการอื่น ๆ ตามความจำเป็น) เพื่อบันทึก / โหลดแอตทริบิวต์ใหม่ ในฐานะนักพัฒนาส่วนขยายคุณเท่านั้นที่ทราบว่าควรเก็บแอตทริบิวต์นี้ไว้ที่ใดตารางใดบ้าง ดู\Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave
เป็นตัวอย่าง
- หากคุณต้องการให้แอททริบิวนี้ปรากฏในคอลเล็กชัน (เพื่อให้สามารถค้นหา / กรองได้) ให้ประกาศ
join
โหนด ถ้าไม่เช่นนั้นเพียงแค่ข้ามสิ่งนี้
- เข้าแอตทริบิวต์ที่กำหนดเองของคุณเป็น:
$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>