El mecanismo de atributos de extensión debe usarse en este caso. Permite la extensión de API centrales por módulos de terceros. Pasos genéricos para habilitar el nuevo atributo de extensión:
- Declare el atributo de extensión como se describe en los documentos oficiales . Después de borrar
var
y ejecutar <project_root>/bin/magento setup:di:compile
, debe aparecer el setter y getter correspondientes para este nuevo atributo \Magento\Customer\Api\Data\GroupExtensionInterface
(esta interfaz se genera automáticamente)
- Plugins de escritura para
\Magento\Customer\Api\GroupRepositoryInterface::save
, \Magento\Customer\Api\GroupRepositoryInterface::getById
(y cualquier otros métodos de servicio si es necesario) para guardar / cargar nuevo atributo. Como desarrollador de extensiones, solo usted sabe dónde debe almacenarse este atributo, puede ser cualquier tabla. Ver \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave
como un ejemplo
- Si necesita hacer que este atributo sea visible en la colección (para que se pueda buscar / filtrar), declare
join
nodo. Si no es así, solo omita esto
- Acceda a su atributo personalizado como:,
$customerGroup->getExtensionAttributes()->getMyAttribute()
donde se customerGroup
implementa \Magento\Customer\Api\Data\GroupInterface
. setMyAttribute()
puede ser usado también
A continuación se muestra el ejemplo de configuración que se debe poner a 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>