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?