Cơ chế thuộc tính mở rộng nên được sử dụng trong trường hợp này. Nó cho phép mở rộng API lõi bằng các mô-đun của bên thứ 3. Các bước chung để bật thuộc tính mở rộng mới:
- Khai báo thuộc tính mở rộng như được mô tả trong các tài liệu chính thức . Sau khi xóa
var
và chạy <project_root>/bin/magento setup:di:compile
, setter và getter tương ứng cho thuộc tính mới này sẽ xuất hiện \Magento\Customer\Api\Data\GroupExtensionInterface
(giao diện này được tạo tự động)
- Viết các plugin cho
\Magento\Customer\Api\GroupRepositoryInterface::save
, \Magento\Customer\Api\GroupRepositoryInterface::getById
(và bất kỳ phương thức dịch vụ nào khác nếu cần) để lưu / tải thuộc tính mới. Là một nhà phát triển tiện ích mở rộng, chỉ bạn biết nơi thuộc tính này sẽ được lưu trữ, có thể là bất kỳ bảng nào. Xem \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave
làm ví dụ
- Nếu bạn cần làm cho thuộc tính này hiển thị trong bộ sưu tập (để làm cho nó có thể tìm kiếm / có thể lọc), hãy khai báo
join
nút. Nếu không thì hãy bỏ qua
- Truy cập thuộc tính tùy chỉnh của bạn như :
$customerGroup->getExtensionAttributes()->getMyAttribute()
, nơi customerGroup
thực hiện \Magento\Customer\Api\Data\GroupInterface
. setMyAttribute()
cũng có thể được sử dụng
Dưới đây là ví dụ về cấu hình nên được đặt 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>