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