인용 속성과 같은 확장 속성을 사용하여 머리를 감싸고 싶습니다.
Magento 1과 같은 설정 클래스를 사용하여 이러한 엔티티에 사용자 정의 속성을 추가하는 데 아무런 문제가 없습니다.이 질문에 관한 것이 아닙니다.
엔터티 API를 통해 확장에 의해 추가 된 속성을 확장 속성으로 노출하려고 할 때 마술이 나를 압도합니다.
업데이트 : 일반 팩토리가 생성되는 방법을 알고 있습니다. 이 질문은 생성 된 확장 속성 인터페이스에 대해 생성 된 구현을 인스턴스화하는 특수 팩토리에 관한 것입니다.
작동시키기 위해 취한 단계는 다음과 같습니다. 나는 이것들을 추가하여 대답하려고하는 사람이 그 세부 사항에 들어갈 필요가 없습니다.
내 질문은 어떻게 또는 왜 작동하는지입니다.
엔티티 API를 통해 확장 속성을 노출하는 단계 :
etc/extension_attributes.xml
엔티티 인터페이스에 속성을 추가하는를 작성하십시오.- 엔티티
ExtensionAttributes
인스턴스에 속성 값을 추가하는 플러그인을 작성하십시오 .
두 번째 요점을 수행하려면 엔티티 ExtensionAttributes
인스턴스가 필요합니다. 이러한 이유로 플러그인은 팩토리에 의존하며, 오브젝트 매니저는 DI를 통해 제공합니다.
견적 항목 예제 Magento\Quote\Api\Data\CartItemExtensionFactory
를 사용해야합니다.
나는이 공장의 유형이 어떻게 든 세대 마법의 방아쇠가되어야한다고 생각한다.
그런 다음 Magento \Magento\Quote\Api\Data\CartItemExtensionInterface
는 모든 확장 속성에 대한 setter 및 getter와 일치하는 인터페이스를 생성 합니다.
그러나 해당 인터페이스에 대한 구체적인 구현을 생성하지는 않습니다. 적어도 PHPStorm은 보이지 않습니다.
Magento는 클래스를 생성하는 데 필요한 정보를 어떻게 수집합니까? 구체적인 인스턴스에서 생성 된 인터페이스 메소드를 어떻게 호출 할 수 있습니까? 메모리에서만 생성되는 클래스입니까?
나는 그것이 작동하는 것이 행복하지만 실제로 만족스럽지 않습니다. 확장 기능으로 자동 생성 된 속성을 사용하는 마젠 토스 기능은 성공의 핵심 요소입니다. 모듈 개발자는 전체 프로세스를 완전히 이해해야한다고 생각합니다.
시간이 있다면 나는 이것을 직접 파고 들지만 설명을 얻을 수 있으면 좋겠다.
업데이트 2 :를 통해 읽을 수있는 약간의 시간을 툭 \Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator
하고 \Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator
. 이제 나는 적어도 무슨 일이 일어나고 있는지 대략적인 생각을 가지고 있습니다. 아무도 나를 이길 수 없다면 유용한 프로세스라고 생각할 때 한 번에 전체 프로세스에 대한 설명을 작성합니다.