Magento 2 Wie speichere ich ein benutzerdefiniertes Feld, das in Form einer Kundengruppe hinzugefügt wurde?
-
13-12-2019 - |
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.
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:
- 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) - 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 - 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 - Greifen Sie auf Ihr benutzerdefiniertes Attribut zu als:
$customerGroup->getExtensionAttributes()->getMyAttribute()
, wocustomerGroup
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!