Frage

Ich habe dem Formular der Kundengruppe einige benutzerdefinierte Felder hinzugefügt, indem ich Folgendes verwendet habe upgradeSchema.php.

Danach habe ich festgestellt, dass die ursprünglichen Felder wie Kundengruppencode und Steuernummer mithilfe von Setter-Methoden in der bereitgestellten API gespeichert werden.Es ist völlig anders als Magento 1.X, die nur setXXX () zum Speichern verwenden.

War es hilfreich?

Lösung

In diesem Fall sollte der Mechanismus für Erweiterungsattribute verwendet werden.Es ermöglicht die Erweiterung von Kern-APIs durch 3rd-Party-Module.Generische Schritte zum Aktivieren eines neuen Erweiterungsattributs:

  1. Deklarieren Sie das Erweiterungsattribut wie in der offizielle Dokumente.Nach dem Löschen var und laufen <project_root>/bin/magento setup:di:compile, sollte der entsprechende Setter und Getter für dieses neue Attribut in erscheinen \Magento\Customer\Api\Data\GroupExtensionInterface (diese Schnittstelle wird automatisch generiert)
  2. Schreibe Plugins für \Magento\Customer\Api\GroupRepositoryInterface::save, \Magento\Customer\Api\GroupRepositoryInterface::getById (und alle anderen Servicemethoden nach Bedarf) zum Speichern / Laden eines neuen Attributs.Als Erweiterungsentwickler wissen nur Sie, wo dieses Attribut gespeichert werden soll, möglicherweise eine beliebige Tabelle.Sehen \Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave als Beispiel
  3. Wenn Sie dieses Attribut in der Sammlung sichtbar machen müssen (um es durchsuchbar / filterbar zu machen), deklarieren Sie join Knoten.Wenn nicht, dann überspringen Sie das einfach
  4. Greifen Sie auf Ihr benutzerdefiniertes Attribut zu als: $customerGroup->getExtensionAttributes()->getMyAttribute(), wo customerGroup implementieren \Magento\Customer\Api\Data\GroupInterface. setMyAttribute() kann auch verwendet werden

Unten ist das Beispiel der Konfiguration, auf die gesetzt werden sollte 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>

Andere Tipps

Vergessen Sie nicht, dass ein Modul eine generakodicetagcode-Datei darin benötigt, und Sie müssen den generationspflichtigen Titel verwenden, bevor er angezeigt wird!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top