В этом случае следует использовать механизм атрибутов расширения. Это позволяет расширять основные 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>