Magento 2 Come salvare il campo personalizzato aggiunto sotto forma di gruppo di clienti?
-
13-12-2019 - |
Domanda
Ho aggiunto alcuni campi personalizzati alla forma del gruppo di clienti utilizzando upgradeSchema.php
.
Successivamente ho trovato che i campi originali come il codice del Gruppo clienti e l'ID fiscale vengono salvati utilizzando metodi di setter nell'API fornito.È completamente diverso da Magento 1.x che usa SetXXX () per salvare.
Soluzione
Il meccanismo degli attributi di estensione deve essere utilizzato in questo caso. Permette l'estensione delle API di base di moduli di terze parti. Passi generici per abilitare il nuovo attributo di estensione:
- .
- Dichiarare l'attributo di estensione come descritto in Documenti ufficiali . Dopo aver cancellato
var
e eseguire<project_root>/bin/magento setup:di:compile
, il setter e il getter corrispondente per questo nuovo attributo dovrebbero apparire in\Magento\Customer\Api\Data\GroupExtensionInterface
(questa interfaccia è generata automaticamente) - Scrivi plugin per
\Magento\Customer\Api\GroupRepositoryInterface::save
,\Magento\Customer\Api\GroupRepositoryInterface::getById
(e altri metodi di servizio secondo necessità) per salvare / caricare un nuovo attributo. Come sviluppatore di estensione, solo tu sai dove dovrebbe essere memorizzato questo attributo, potrebbe essere qualsiasi tabella. Vedi\Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave
come esempio - Se è necessario effettuare questo attributo visibile nella raccolta (per renderlo ricercabile / filtrabile), dichiarare il nodo
join
. In caso contrario, salta questo - Accedi al tuo attributo personalizzato come:
$customerGroup->getExtensionAttributes()->getMyAttribute()
, dovecustomerGroup
implementa\Magento\Customer\Api\Data\GroupInterface
.setMyAttribute()
può essere utilizzato anche
Di seguito è riportato l'esempio di configurazione che dovrebbe essere messo 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>
.Altri suggerimenti
Non dimenticare che un modulo ha bisogno di un file register.php
in esso, e devi utilizzare bin/magento module:enable VendorName_ModuleName
prima che verrà visualizzato!