Мне было интересно, как правильно реализовать расширяемую модель EAV.
Я вижу Magento\Catalog\Model\Product
, что метод getExtensionAttributes()
реализован так:
public function getExtensionAttributes()
{
$extensionAttributes = $this->_getExtensionAttributes();
if (!$extensionAttributes) {
return $this->extensionAttributesFactory->create('Magento\Catalog\Api\Data\ProductInterface');
}
return $extensionAttributes;
}
Но в других, как модели клиентов или категории, это просто
public function getExtensionAttributes()
{
return $this->_getExtensionAttributes();
}
что может привести к NULL- результату, если ключ extension_attributes не был установлен ранее.
Прагматично, я бы предпочел первый. Таким образом, я всегда могу получить экземпляр Magento\Framework\Api\ExtensionAttributesInterface
, даже если модель только что была создана.
Но почему тогда он не используется в других модулях? Это против нового разделения моделей данных, которое мы видим в модуле клиента? Если так, как мы должны инициализировать атрибуты расширения?
источник
$order->getExtensionAttributes()
и был решен после получения заказа , как показано ниже:$order = $this->orderRepositoryInterface->get($order->getId());
. Интерфейс заказа репозитория естьMagento\Sales\Api\OrderRepositoryInterface
. Не уверен, что ваша проблема была такой жеКод по-разному используется в различных расширениях. Функциональность используется для привязки любого атрибута в этом интерфейсе. Чтобы лучше понять это, перейдите по этой ссылке: http://oyenetwork.com/articles/magento2-devliery-date-module-creation-from-scratch/
источник
getExtensionAttributes()
в пользовательских объектах