У цьому випадку слід використовувати механізм атрибутів розширення. Це дозволяє розширювати основні API на сторонні модулі. Загальні кроки для ввімкнення нового атрибуту розширення:
- Оголосити атрибут розширення, як описано в офіційних документах . Після очищення
var
та запуску <project_root>/bin/magento setup:di:compile
відповідний сеттер і гетьтер для цього нового атрибута повинні з'явитися в \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>