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.