拡張属性は、インターフェースを拡張する方法です。例として、ProductAttributeMediaGalleryEntryInterfaceに提供した最初のリンクを見てみましょう。そこにメソッドを見ると、このメソッドがあることがわかります
/**
* Retrieve existing extension attributes object or create a new one.
*
* @return \Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionInterface|null
*/
public function getExtensionAttributes();
メソッドProductAttributeMediaGalleryEntryExtensionInterfaceの@returnタイプに注意してください。これは、ProductAttributeMediaGalleryEntryInterfaceの拡張属性を定義すると再生成されるインターフェースです(デフォルトでは、メソッドなしで空に生成されます)。登録した属性の名前は、インターフェースのメソッドを作成するために使用されます。
タイプstringのattr1を追加したとしましょう。インターフェースが再生成された後にできることは、インターフェースのインスタンスからそれにアクセスすることです。
$entity = $objectManager->get('..\ProductAttributeMediaGalleryEntryInterface')
$entity->getExtensionAttributes()->getAttr1();
属性を設定するには、拡張属性インターフェイスをインスタンス化する必要があります
$extension = $objectManager->get('..\ProductAttributeMediaGalleryEntryExtensionInterface')
$extension->setAttr1('value');
$entity->setExtensionAttributes($extension)
後者は使用可能なデフォルトのシナリオであり、ExtensionInterfaceおよび親インターフェースの実装方法によっては簡略化される場合があります。
[更新しました]
カスタム属性と拡張属性は目的が異なります。
エンティティのEAV属性を表すには、カスタム属性が必要です。ほとんどのEAV属性は動的です。これらは、Magentoが管理UIを介してデプロイされた後に追加できます。そのため、EAV属性のコードのオートコンプリートを取得できません。すべての属性について事前に把握しているわけではありません。
ただし、拡張機能の開発者は、開発時に作成した属性など、確かにいくつかの属性を知っています。データベースの新しいフィールド、関連データベースのフィールド、またはEAV属性を指定できます。それらは、コードベースが変更されない限り変更されないため、拡張属性として登録できます。それらのコードのオートコンプリートを取得できます。