Magento 2如何保存以客户组的形式添加的自定义字段?


9

我通过使用将一些自定义字段添加到客户组的形式upgradeSchema.php

之后,我发现通过使用提供的API中的setter方法可以保存客户组代码和税号等原始字段。与Magento 1.X完全不同,后者仅使用setXXX()进行保存。


我已经尝试使用\ Magento \ Customer \ Api \ Data \ GroupInterface $ customerGroup-> setData('program_type',$ programType); program_type对应于要保存到数据库中的表列“ program_type”,但失败。
Ricky.C 2015年

是否应该使用getter和setter编写自定义API以保存字段?
Ricky.C 2015年

Answers:


23

在这种情况下,应使用扩展属性机制。它允许通过第三方模块扩展核心API。启用新扩展名属性的通用步骤:

  1. 按照官方文档中的说明声明扩展属性。清除var并运行后<project_root>/bin/magento setup:di:compile,该新属性的对应的setter和getter应该出现在\Magento\Customer\Api\Data\GroupExtensionInterface(此界面是自动生成的)
  2. 写插件\Magento\Customer\Api\GroupRepositoryInterface::save\Magento\Customer\Api\GroupRepositoryInterface::getById(以及任何其他服务方式需要)以保存/加载新的属性。作为扩展开发人员,只有您知道此属性应该存储在哪里,可以是任何表。见\Magento\Downloadable\Model\Plugin\AroundProductRepositorySave::aroundSave作为一个例子
  3. 如果需要使该属性在集合中可见(使其可搜索/​​可过滤),则声明joinnode。如果没有,那就跳过这个
  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 2015年

我的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 2015年

文件应名为extension_attributes.xml(复数)。尝试使用CLI调用所有自动生成的实体的生成。
Alex Paliarush 2015年

很抱歉上面的注释有错字,我实际上拥有的文件是extension_attributes.xml
Ricky.C 2015年

我用谷歌搜索,但是什么也没找到。您能告诉我应该使用哪个命令吗?我是新来者,对cli不熟悉。谢谢。
Ricky.C 2015年

2

不要忘记一个模块需要一个register.php文件,并且bin/magento module:enable VendorName_ModuleName在它出现之前必须使用它!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.