Magento 2顧客グループの形式で追加されたカスタムフィールドを保存する方法


9

を使用して、いくつかのカスタムフィールドを顧客グループのフォームに追加しましたupgradeSchema.php

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


\ Magento \ Customer \ Api \ Data \ GroupInterface $ customerGroup-> setData( 'program_type'、$ programType);を使用してみました。program_typeは、データベースに保存するテーブル列 'program_type'に対応していますが、失敗しました。
Ricky.C 2015年

フィールドを保存するために、getterとsetterを使用してカスタムAPIを作成する必要がありますか?
Ricky.C 2015年

回答:


23

この場合、拡張属性メカニズムを使用する必要があります。サードパーティモジュールによるコアAPIの拡張を可能にします。新しい拡張属性を有効にするための一般的な手順:

  1. 公式ドキュメントに記載されているように拡張属性を宣言します。をクリアvarして実行<project_root>/bin/magento setup:di:compileすると、この新しい属性に対応するセッターとゲッターが表示されます\Magento\Customer\Api\Data\GroupExtensionInterface(このインターフェイスは自動生成されます)。
  2. 新しい属性を保存/ロードするための\Magento\Customer\Api\GroupRepositoryInterface::save\Magento\Customer\Api\GroupRepositoryInterface::getByIdおよび必要に応じてその他のサービスメソッドのプラグインを記述します。拡張機能の開発者は、この属性を格納する場所を知っているのはあなただけです。\Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave例として見る
  3. この属性をコレクションで表示可能にする(検索/フィルター可能にする)必要がある場合は、joinノードを宣言します。そうでない場合は、これをスキップしてください
  4. :としてあなたのカスタム属性にアクセスし$customerGroup->getExtensionAttributes()->getMyAttribute()、どこcustomerGroup実装\Magento\Customer\Api\Data\GroupInterfacesetMyAttribute()同様に使用できます

以下は、設定の例です。 VendorName/ModuleName/etc/extension_attributes.xml

<?xml version="1.0"?>
<config>
    <extension_attributes for="Magento\Customer\Api\Data\GroupInterface">
        <!--Data interface can be used as a type of attribute, see example in CatalogInventory module-->
        <attribute code="name_of_attribute" type="string">
            <resources>
                <resource ref="VendorName_ModuleName::someAclNode"/>
            </resources>
            <!--Join is optional, only if you need to have added attribute visible in groups list-->
            <join reference_table="table_where_attribute_is_stored" reference_field="group_id_field_in_that_table" join_on_field="group_id">
                <field>name_of_added_attribute_field_in_that_table</field>
            </join>
        </attribute>
    </extension_attributes>
</config>

extension_attributes.xmlを追加しようとしましたが、新しいインターフェースが生成されません。ps生成フォルダを削除して、いくつかの操作を呼び出しました.....
Ricky.C

私のextension_attribute.xml:<?xml version = "1.0"?> <config> <extension_attributes for = "Magento \ Customer \ Api \ Data \ GroupInterface"> <attribute code = "group_domain" type = "string" /> </ extension_attributes> </ config>
Ricky.C

ファイルの名前は、extension_attributes.xml(複数)にする必要があります。CLIを使用して、すべての自動生成エンティティの生成を呼び出してみてください。
Alex Paliarush、2015

上記のコメントの誤植に申し訳ありませんが、私が実際に持っているファイルはextension_attributes.xmlです
Ricky.C

私はググってみましたが何も見つかりませんでした。使用するコマンドを教えてください。私は、CLIになじみのない新人です。ありがとう。
Ricky.C

2

モジュールにはregister.phpファイルが必要であることを忘れないでください。モジュールbin/magento module:enable VendorName_ModuleNameが表示される前に使用する必要があります!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.