문제

무엇인지 잘 모르겠습니다. 문서 말하고 있습니다.

나는 그들이 다음을 통해 속성(복잡하든 아니든)을 추가하는 데 사용된다는 것을 알고 있습니다. etc/extension_attributes.xml 그리고 컴파일 프로세스에서 자동 생성 사용자 정의 메소드를 사용하여 인터페이스를 생성하도록 관리했지만 그게 전부입니다.

몇 가지 인터페이스를 예로 들어 보겠습니다. 깃허브 링크 1 그리고 깃허브 링크 2.확장 속성을 사용하여 해당 인터페이스 중 하나에 특정 속성을 추가하려면 어떻게 해야 합니까?복잡한 조인에는 관심이 없습니다.스칼라 속성을 추가하기만 하면 됩니다. "attr1" 유형이라고 말하세요. string.

그만큼 Data 인터페이스는 모델의 erm으로 가는 관문입니다.따라서 시스템을 올바르게 사용하려면 해당 인터페이스의 확장이 어떻게 작동하는지 이해해야 합니다.나는 자주 Data 실제 모델 대신 매개변수로 인터페이스하면 실제로는 괜찮습니다.하지만 확장 기능이 어떻게 작동하는지 조금 혼란스러워요.

도움이 되었습니까?

해결책

확장 속성은 인터페이스를 확장하는 방법입니다.ProductAttributeMediaGalleryEntryInterface에 제공한 첫 번째 링크를 예로 들어 보겠습니다.메소드를 보면 이 메소드가 있다는 것을 알 수 있습니다.

/**
 * Retrieve existing extension attributes object or create a new one.
 *
 * @return \Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionInterface|null
 */
public function getExtensionAttributes();

ProductAttributeMediaGalleryEntryExtensionInterface 메소드의 @return 유형에 유의하세요. 이는 ProductAttributeMediaGalleryEntryInterface에 대한 확장 속성을 정의하는 경우 다시 생성되는 인터페이스입니다(기본적으로 메소드 없이 빈 상태로 생성됩니다).등록한 속성의 이름은 인터페이스의 메소드를 생성하는 데 사용됩니다.

문자열 유형의 attr1을 추가했다고 가정해 보겠습니다.인터페이스가 재생성된 후 수행할 수 있는 작업은 인터페이스 인스턴스에서 액세스하는 것입니다.

$entity = $objectManager->get('..\ProductAttributeMediaGalleryEntryInterface')
$entity->getExtensionAttributes()->getAttr1();

속성을 설정하려면 확장 속성 인터페이스를 인스턴스화해야 합니다.

$extension = $objectManager->get('..\ProductAttributeMediaGalleryEntryExtensionInterface')
$extension->setAttr1('value');
$entity->setExtensionAttributes($extension)

후자는 사용 가능한 기본 시나리오이며 ExtensionInterface 및 상위 인터페이스가 구현되는 방식에 따라 단순화될 수 있습니다.

[업데이트]

사용자 정의 속성과 확장 속성은 서로 다른 용도로 사용됩니다.

엔터티의 EAV 속성을 나타내려면 사용자 정의 속성이 필요합니다.대부분의 EAV 속성은 동적입니다.관리 UI를 통해 Magento가 배포된 후에 추가할 수 있습니다.그렇기 때문에 EAV 속성에 대한 코드 자동 완성을 얻을 수 없습니다.당신은 그들 모두에 대해 미리 알지 못합니다.

그러나 확장 개발자로서 당신은 개발 시 생성한 속성 중 일부 속성에 대해 확실히 알고 있습니다.데이터베이스의 새 필드, 관련 데이터베이스의 필드 또는 EAV 속성일 수 있습니다.코드베이스가 변경되지 않는 한 절대 변경되지 않으므로 확장 속성으로 등록할 수 있습니다.코드 자동 완성을 얻을 수 있습니다.

다른 팁

@EugeneTulika 답변을 완료하려면 /etc/extension_attributes.xml을 생성해야 합니다.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Catalog\Api\Data\ProductInterface">
        <attribute code="attr1" type="string" />
    </extension_attributes>
</config>

그런 다음 아래와 같이 setAttr1() 메서드를 사용하여 새 속성을 설정할 수 있습니다.

/** @var ProductExtension $extensionAttributes */
$extensionAttributes = $product->getExtensionAttributes();
$extensionAttributes->setAttr1('super data');
$product->setExtensionAttributes($extensionAttributes);

이것이 누군가에게도 도움이 될 수 있기를 바랍니다 :)

할 것이다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top