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.

È stato utile?

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:

    .
  1. 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)
  2. 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
  3. Se è necessario effettuare questo attributo visibile nella raccolta (per renderlo ricercabile / filtrabile), dichiarare il nodo join. In caso contrario, salta questo
  4. Accedi al tuo attributo personalizzato come: $customerGroup->getExtensionAttributes()->getMyAttribute(), dove customerGroup implementa \Magento\Customer\Api\Data\GroupInterface. setMyAttribute() può essere utilizzato anche
  5. 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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top