Magento 2 come salvare il campo personalizzato aggiunto sotto forma di gruppo di clienti?


9

Ho aggiunto alcuni campi personalizzati alla forma del gruppo di clienti utilizzando upgradeSchema.php.

Successivamente ho scoperto che i campi originali come il codice del gruppo di clienti e l'ID fiscale vengono salvati utilizzando i metodi setter nell'API fornita. È completamente diverso da Magento 1.X che usa semplicemente setXXX () per salvare.


Ho provato a usare \ Magento \ Customer \ Api \ Data \ GroupInterface $ customerGroup-> setData ('program_type', $ programType); tipo di programma corrisponde alla colonna della tabella "tipo di programma" per il salvataggio nel database, ma non è riuscito.
Ricky.C,

Devo scrivere un'API personalizzata con getter e setter per salvare i campi?
Ricky.C,

Risposte:


23

In questo caso dovrebbe essere usato il meccanismo degli attributi di estensione. Consente l'estensione delle API core con moduli di terze parti. Passaggi generici per abilitare il nuovo attributo di estensione:

  1. Dichiarare l'attributo di estensione come descritto nei documenti ufficiali . Dopo aver cancellato vared eseguito <project_root>/bin/magento setup:di:compile, setter e getter corrispondenti per questo nuovo attributo dovrebbero apparire in \Magento\Customer\Api\Data\GroupExtensionInterface(questa interfaccia è generata automaticamente)
  2. Scrivi plugin per \Magento\Customer\Api\GroupRepositoryInterface::save, \Magento\Customer\Api\GroupRepositoryInterface::getById(e qualsiasi altro metodo di servizio se necessario) per salvare / caricare un nuovo attributo. Come sviluppatore di estensioni, solo tu sai dove archiviare questo attributo, può esserci una qualsiasi tabella. Vedi \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSavecome esempio
  3. Se è necessario rendere questo attributo visibile nella raccolta (per renderlo ricercabile / filtrabile), dichiarare joinnodo. In caso contrario, salta questo
  4. Accedi al tuo attributo personalizzato come:, $customerGroup->getExtensionAttributes()->getMyAttribute()dove customerGroupimplementa \Magento\Customer\Api\Data\GroupInterface. setMyAttribute()può anche essere usato

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>

Ho provato ad aggiungere extension_attributes.xml, ma non viene generata alcuna nuova interfaccia. ps ho cancellato la cartella di generazione e invocato alcune operazioni .....
Ricky.C,

My extension_attribute.xml: <? Xml version = "1.0"?> <config> <extension_attributes for = "Magento \ Customer \ Api \ Data \ GroupInterface"> <codice attributo = "group_domain" type = "string" /> </ extension_attributes> </config>
Ricky.C,

Il file dovrebbe essere chiamato extension_attributes.xml (plurale). Prova a invocare la generazione di tutte le entità autogenerate utilizzando l'interfaccia della riga di comando.
Alex Paliarush,

scusate il refuso sul commento sopra, il file che ho in realtà è extension_attributes.xml
Ricky.C il

Ho cercato su Google ma non ho trovato nulla. Potete farmi sapere quale comando dovrebbe essere usato? Sono un nuovo arrivato che non ha familiarità con il cli. Grazie.
Ricky.C,

2

Non dimenticare che un modulo ha bisogno di un register.phpfile al suo interno e devi usarlo bin/magento module:enable VendorName_ModuleNameprima che venga visualizzato!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.