O mecanismo de atributos de extensão deve ser usado neste caso. Ele permite a extensão das principais APIs por módulos de terceiros. Etapas genéricas para ativar o novo atributo de extensão:
- Declare o atributo de extensão conforme descrito nos documentos oficiais . Após a limpeza
var
e execução <project_root>/bin/magento setup:di:compile
, o setter e o getter correspondentes para esse novo atributo devem aparecer em \Magento\Customer\Api\Data\GroupExtensionInterface
(essa interface é gerada automaticamente)
- Escrever plugins para
\Magento\Customer\Api\GroupRepositoryInterface::save
, \Magento\Customer\Api\GroupRepositoryInterface::getById
(e quaisquer outros métodos de serviço, conforme necessário) para salvar / novo atributo de carga. Como desenvolvedor de extensões, somente você sabe onde esse atributo deve ser armazenado; pode haver qualquer tabela. Veja \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave
como um exemplo
- Se você precisar tornar esse atributo visível na coleção (para torná-lo pesquisável / filtrável), declare o
join
nó. Caso contrário, basta pular esta
- Acesse seu atributo personalizado como:,
$customerGroup->getExtensionAttributes()->getMyAttribute()
onde customerGroup
implementa \Magento\Customer\Api\Data\GroupInterface
. setMyAttribute()
também pode ser usado
Abaixo está o exemplo de configuração que deve ser colocado em 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>