Magento 2 고객 그룹의 형태로 추가 된 사용자 정의 필드를 저장하는 방법은 무엇입니까?


9

를 사용하여 일부 사용자 정의 필드를 고객 그룹의 양식에 추가했습니다 upgradeSchema.php.

그 후 고객 그룹 코드 및 세금 ID와 같은 원래 필드가 제공된 API의 setter 메소드를 사용하여 저장됩니다. setXXX ()를 사용하여 저장하는 것은 Magento 1.X와 완전히 다릅니다.


\ Magento \ Customer \ Api \ Data \ GroupInterface $ customerGroup-> setData ( 'program_type', $ programType); program_type은 데이터베이스에 저장하기 위해 테이블 ​​열 'program_type'에 해당하지만 실패했습니다.
Ricky.C

필드를 저장하기 위해 getter 및 setter를 사용하여 사용자 정의 API를 작성해야합니까?
Ricky.C

답변:


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. 이 속성을 콜렉션에서 볼 수있게하려면 (검색 가능 / 필터 가능) join노드를 선언 하십시오. 그렇지 않다면 그냥 건너 뛰십시오.
  4. :로 사용자 정의 속성에 액세스 $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>

extension_attributes.xml을 추가하려고했지만 새 인터페이스가 생성되지 않았습니다. 추신 : 나는 생성 폴더를 삭제하고 몇 가지 작업을 호출했습니다 .....
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 2012

위의 의견에서 오타가 유감입니다. 실제로 가지고있는 파일은 extension_attributes.xml
Ricky.C

나는 봤지만 아무것도 찾지 못했습니다. 어떤 명령을 사용해야하는지 알려주시겠습니까? 나는 병원에 익숙하지 않은 새로운 출근 자입니다. 감사.
Ricky.C

2

모듈에 register.php파일이 필요하다는 것을 잊지 마십시오. bin/magento module:enable VendorName_ModuleName표시되기 전에 사용해야 합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.