Das Erweiterungsattribut ist eine Möglichkeit, die Schnittstelle zu erweitern. Nehmen wir als Beispiel den ersten Link, den Sie zum ProductAttributeMediaGalleryEntryInterface bereitgestellt haben. Wenn Sie sich dort die Methoden ansehen, werden Sie feststellen, dass diese Methode vorhanden ist
/**
* Retrieve existing extension attributes object or create a new one.
*
* @return \Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionInterface|null
*/
public function getExtensionAttributes();
Beachten Sie den @ return-Typ der Methode ProductAttributeMediaGalleryEntryExtensionInterface. Dies ist eine Schnittstelle, die neu generiert wird, wenn Sie das Erweiterungsattribut für ProductAttributeMediaGalleryEntryInterface definieren (standardmäßig wird sie ohne Methoden leer generiert). Der Name des von Ihnen registrierten Attributs wird zum Erstellen von Schnittstellenmethoden verwendet.
Nehmen wir an, Sie haben attr1 vom Typ string hinzugefügt. Nachdem die Schnittstelle neu generiert wurde, können Sie von der Instanz der Schnittstelle aus darauf zugreifen.
$entity = $objectManager->get('..\ProductAttributeMediaGalleryEntryInterface')
$entity->getExtensionAttributes()->getAttr1();
Um das Attribut festzulegen, müssten Sie die Schnittstelle für Erweiterungsattribute instanziieren
$extension = $objectManager->get('..\ProductAttributeMediaGalleryEntryExtensionInterface')
$extension->setAttr1('value');
$entity->setExtensionAttributes($extension)
Letzteres ist ein Standard-Szenario, das je nach Implementierung von ExtensionInterface und übergeordneter Schnittstelle vereinfacht werden kann.
[Aktualisiert]
Benutzerdefinierte Attribute und Erweiterungsattribute dienen unterschiedlichen Zwecken.
Benutzerdefinierte Attribute werden benötigt, um die EAV-Attribute der Entität darzustellen. Die meisten EAV-Attribute sind dynamisch: Sie können hinzugefügt werden, nachdem Magento über die Administrator-Benutzeroberfläche bereitgestellt wurde. Aus diesem Grund können Sie keine automatische Code-Vervollständigung für EAV-Attribute erhalten: Sie kennen nicht alle im Voraus.
Als Erweiterungsentwickler kennen Sie jedoch einige Attribute, die Sie zur Entwicklungszeit erstellt haben. Dies kann ein neues Feld in der Datenbank, ein Feld in der zugehörigen Datenbank oder ein EAV-Attribut sein. Sie können sie als Erweiterungsattribut registrieren, da sie sich nur ändern, wenn die Codebasis geändert wird. Sie können die automatische Vervollständigung des Codes für sie erhalten.
setCustomAttribute()
, aber ich mag die automatische Vervollständigung, die ich von den automatisch generierten Erweiterungsschnittstellen erhalte. Aber wenn ich das nutzen möchte, muss ich die Erweiterung selbst einstellen . Erweiterungen sind also eher eine manuelle Sache? Vielleicht sagt dies besser, was ich zu sagen versuche: gist.github.com/nevvermind/155952b0b01773f4b42fextension_attributes.xml
können sie alle fangen - wenn du wolltest, das ist. Alles in allem bin ich jetzt zuversichtlich genug, Erweiterungsattrs in Angriff zu nehmen. Herzlichen Dank.Um die @ EugeneTulika-Antwort zu vervollständigen, müssen wir /etc/extension_attributes.xml erstellen:
Anschließend können Sie Ihr neues Attribut mit der Methode setAttr1 () wie folgt festlegen:
Hoffe das kann auch jemandem helfen :)
Wille
quelle