タグ付けされた質問 「extension-attributes」

2
Magento2は特定のExtensionFactoryおよびExtensionAttributeInterfaceをどのように生成しますか?
引用アイテムなどの拡張属性を使用して、頭を包み込みたいと思います。 Magento 1のようなセットアップクラスを使用して、このようなエンティティにカスタム属性を追加しても問題ありません。これはこの質問の目的ではありません。 現時点では、エンティティAPIを介して拡張機能によって拡張属性として追加されたこのような属性を公開したいときに、この魔法に圧倒されます。 更新:通常のファクトリがどのように生成されるかを知っています。この質問は、生成された拡張属性インターフェースの生成された実装をインスタンス化する特別なファクトリーに関するものです。 これを機能させるために私がとるステップは次のとおりです。私はこれらを追加するので、答えようとする人は誰でもそれらの詳細に入る必要はありません。 私の質問はどのようにか、なぜそれが動作します。 エンティティAPIを介して拡張属性を公開する手順: etc/extension_attributes.xmlエンティティインターフェイスに属性を追加するを作成します エンティティExtensionAttributesインスタンスに属性値を追加するプラグインを作成します。 2番目のポイントを実行するには、エンティティExtensionAttributesインスタンスが必要です。このため、プラグインはファクトリに依存します。ファクトリは、オブジェクトマネージャがDIを介して提供します。 見積品目の例Magento\Quote\Api\Data\CartItemExtensionFactoryを使用する必要があります。 私はこの工場のタイプが何らかの形で生成魔法の引き金になっているに違いないと思います。 その後、Magentoは\Magento\Quote\Api\Data\CartItemExtensionInterface、すべての拡張属性のセッターとゲッターとの一致するインターフェースを生成します。 ただし、そのインターフェイスの具体的な実装は生成されないようです。少なくともPHPStormはそれを見ていません。 Magentoは、クラスを生成するために必要な情報をどのように収集しますか?生成されたインターフェイスメソッドは、具体的なインスタンスでどのように呼び出すことができますか?メモリのみで生成されるクラスですか? 私はそれが機能することを嬉しく思いますが、それは本当に満足のいくものではありません。拡張機能によって自動的に作成された属性を使用するMagentos機能は、その成功の重要な要因の1つです。モジュール開発者として、プロセス全体を完全に理解する必要があると思います。 時間があれば、自分でこれを掘り下げたいと思いますが、説明が得られればいいと思います。 UPDATE 2:通読するために少し時間がかかった\Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGeneratorと\Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator。今、私は少なくとも何が起こっているのか大まかな考えを持っています。誰も私に勝てない場合、私はそれが有用な参考になると思うので、ある時点で完全なプロセスの説明を書きます。

3
プロパティには、チェックアウト手順の変更中にクラスMagento \ Quote \ Api \ Data \ AddressInterfaceに対応するセッターがありません
1-customer_addressにeav属性を追加します $attributesInfo = [ 'reference' => [ 'label' => 'Reference', 'type' => 'varchar', 'input' => 'text', 'position' => 100, 'visible' => true, 'required' => false, ], ]; foreach ($attributesInfo as $attributeCode => $attributeParams) { $customerSetup->addAttribute('customer_address', $attributeCode, $attributeParams); } 2-モジュールに拡張属性を追加しました <extension_attributes for="Magento\Quote\Api\Data\AddressInterface"> <attribute code="reference" type="string"/> </extension_attributes> requirejs-config.jsで、JavaScriptファイルをオーバーライドして参照フィールドを追加します var config = { …



3
getExtensionAttributes()を実装する正しい方法
拡張可能な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(); } これは、extension_attributesキーが以前に設定されていない場合、NULLの結果になる可能性があります。 実用的には、最初の方を好みます。これによりMagento\Framework\Api\ExtensionAttributesInterface、モデルがインスタンス化されたばかりの場合でも、常にのインスタンスを確実に取得できます。 しかし、なぜそれが他のモジュールで使用されないのですか?カスタマーモジュールに表示されるデータモデルの新しい分離に反対ですか?もしそうなら、拡張属性をどのように初期化するべきですか?

2
Magento 2顧客グループの形式で追加されたカスタムフィールドを保存する方法
を使用して、いくつかのカスタムフィールドを顧客グループのフォームに追加しましたupgradeSchema.php。 その後、提供されたAPIのセッターメソッドを使用して、顧客グループコードや納税者番号などの元のフィールドが保存されていることがわかりました。保存にsetXXX()を使用するだけで、Magento 1.Xとは完全に異なります。

1
プラグインを介したmagento 2でのカスタム支払いフィールドデータの保存が機能しない、
プラグインを使用してカスタムフィールドデータを保存しようとしていますが、機能しません。 プラグインクラス namespace Vendor\Module\Model\Checkout; class PaymentInformationManagementPlugin { protected $paymentMethodManagement; public function __construct( \Magento\Quote\Model\QuoteFactory $quote, \Magento\Quote\Api\PaymentMethodManagementInterface $paymentMethodManagement ) { $this->paymentMethodManagement = $paymentMethodManagement; $this->quoteManagement = $quoteManagement; } public function beforeSavePaymentInformation( \Magento\Checkout\Model\PaymentInformationManagement $subject, $cartId, \Magento\Quote\Api\Data\PaymentInterface $paymentInformation ) { //$paymentInformation->getData('extension_attributes'); $extenstinAttributes = $paymentInformation->getExtensionAttributes(); $taxCode = $extenstinAttributes->getTaxCode(); $paymentInformation->setExtensionAttributes($taxCode); $this->paymentMethodManagement->set($cartId, $paymentInformation); return true; // var_dump($taxCode);exit; // …

2
Magento 2で拡張属性はどのように機能しますか?
ドキュメントが何を言っているのかわかりません。 それらを使用して属性を(複雑であるかどうかに関係なく)追加するために使用されていることを知ってetc/extension_attributes.xmlおり、コンパイルプロセスで自動生成のカスタムメソッドを使用してインターフェイスを作成できましたが、それはそれだけです。 いくつかのインターフェースを例にとってみましょう:github link 1とgithub link 2。拡張属性を使用して、これらのインターフェースの1つに特定の属性を追加するにはどうすればよいですか?複雑な結合には興味がありません。スカラー属性を追加するだけで、タイプの「attr1」と言いますstring。 Data私はこれらのインタフェースの拡張が適切にシステムを利用するためにはどのように機能するかを理解する必要があるので、インタフェースは、モデルのERM ...データへのゲートウェイです。私は頻繁Dataに、実際のモデルの代わりにパラメーターとしてインターフェースを取得しますが、それは実際には問題ありません。しかし、私は拡張機能がどのように機能するかについて少し混乱しています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.