Ich habe mich gefragt, wie man ein erweiterbares EAV-Modell richtig implementiert.
Ich sehe, dass in Magento\Catalog\Model\Product
, die Methode getExtensionAttributes()
wie folgt implementiert ist:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Aber in anderen, wie den Kunden- oder Kategoriemodellen, ist es einfach
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
Dies kann zu einem NULL- Ergebnis führen, wenn der Schlüssel extension_attributes noch nicht festgelegt wurde.
Pragmatisch würde ich den ersten vorziehen. Auf diese Weise kann ich immer sicher sein, eine Instanz von zu erhalten Magento\Framework\Api\ExtensionAttributesInterface
, selbst wenn das Modell gerade instanziiert wurde.
Aber warum wird es dann nicht in anderen Modulen verwendet? Ist es gegen die neue Trennung von Datenmodellen, die wir im Kundenmodul sehen? Wenn ja, wie sollen wir die Erweiterungsattribute initialisieren?
quelle
$order->getExtensionAttributes()
und wurde gelöst, nachdem ich die Bestellung wie folgt erhalten hatte :$order = $this->orderRepositoryInterface->get($order->getId());
. Order Repository-Schnittstelle istMagento\Sales\Api\OrderRepositoryInterface
. Nicht sicher, ob Ihr Problem gleich warDer Code wird in verschiedenen Erweiterungen unterschiedlich verwendet. Die Funktionalität wird verwendet, um ein beliebiges Attribut in dieser Schnittstelle zu binden. Weitere Informationen hierzu finden Sie unter folgendem Link: http://oyenetwork.com/articles/magento2-devliery-date-module-creation-from-scratch/
quelle
getExtensionAttributes()
in benutzerdefinierten Entitäten gefragt