Zastanawiałem się, jaki jest właściwy sposób wdrożenia rozszerzalnego modelu EAV.
Widzę Magento\Catalog\Model\Product
, że metoda getExtensionAttributes()
jest implementowana w następujący sposób:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Ale w innych, takich jak modele klientów lub kategorii, jest to po prostu
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
co może prowadzić do wyniku NULL , jeśli klucz extension_attributes nie był wcześniej ustawiony.
Pragmatycznie wolałbym ten pierwszy. W ten sposób zawsze mogę uzyskać instancję Magento\Framework\Api\ExtensionAttributesInterface
, nawet jeśli model został właśnie utworzony.
Ale dlaczego nie jest używany w innych modułach? Czy jest to sprzeczne z nową separacją modeli danych, którą widzimy w module klienta? Jeśli tak, to jak mamy zainicjować atrybuty rozszerzenia?