Je me demandais quelle était la bonne façon de mettre en œuvre un modèle EAV extensible.
Je vois que dans Magento\Catalog\Model\Product
, la méthode getExtensionAttributes()
est implémentée comme ceci:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Mais dans d'autres, comme les modèles client ou catégorie, c'est juste
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
ce qui peut conduire à un résultat NULL , si la clé extension_attributes n'a pas été définie auparavant.
Pragmatiquement, je préférerais le premier. De cette façon, je peux toujours être sûr d'obtenir une instance de Magento\Framework\Api\ExtensionAttributesInterface
, même si le modèle vient d'être instancié.
Mais pourquoi n'est-il pas utilisé dans d'autres modules? Est-ce contre la nouvelle séparation des modèles de données que nous voyons dans le module client? Si oui, comment sommes-nous censés initialiser les attributs d'extension?
la source
$order->getExtensionAttributes()
et a été résolu après avoir obtenu l' ordre comme suit:$order = $this->orderRepositoryInterface->get($order->getId());
. L'interface du référentiel de commandes estMagento\Sales\Api\OrderRepositoryInterface
. Je ne sais pas si votre problème était le mêmeLe code est utilisé de différentes manières dans différentes extensions. La fonctionnalité est utilisée pour lier n'importe quel attribut dans cette interface. Pour une meilleure compréhension de ceci, référez-vous à ce lien: http://oyenetwork.com/articles/magento2-devliery-date-module-creation-from-scratch/
la source
getExtensionAttributes()
en œuvre d' entités personnalisées