의존성 주입 시스템을 사용하여 Magento 2에서 Magento 1 클래스 재 작성


10

Magento 2의 핵심 코드를 살펴보면 이전 클래스 재 작성 시스템이 제거되어 새로운 의존성 주입 시스템으로 대체 된 것처럼 보입니다.

불행히도이 새로운 시스템에 대한 문서없습니다 .

Magento 2에서 사용자 가 새로운 의존성 주입 시스템을 사용하여 Mage_Catalog_Model_Product클래스를 새로운 클래스로 "재 작성"할 수있는 모듈 구성 샘플이 Packagename_Modulename_Model_Product있습니까?


Magento 2.0 질문이 아직 허용되지 않았다고
Marius

답변:


10

Di 구성이 di.xml 파일로 이동되었으며 형식이 수정되었습니다. 이제 환경 설정은 다음과 같습니다 (di.xml).

<config>
    <preference for="{Interface_Or_Class_Name}" type="{Preferred_Class_Name}" />
</config>

클래스 재 작성 인 경우 기본 설정 노드 대신 플러그인을 사용하는 것이 바람직합니까?
huzefam

2
일부 핵심 클래스의 동작을 대체해야하는 경우 기본 설정을 사용해야합니다. 일부 핵심 메소드의 동작을 대체 해야하는 경우 $ proceed ()를 호출하지 않는 리스너 주위에 플러그인을 사용해야합니다. 핵심 메소드 또는 클래스에 동작을 추가해야하는 경우 플러그인을 사용해야합니다.
Anton Kril

5

내부에서 작업하면서 다음을 사용하여 다시 쓰기를 할 수있었습니다.

<global>    
    <di>    
        <preferences>
            <Mage_Catalog_Model_Product>Packagename_Modulename_Model_Product</Mage_Catalog_Model_Product>
        </preferences> 
    </di>
</global>

그러나 의존성 주입 구현에는 훨씬 더 많은 시스템 코드가 있으므로 위의 버전이 Magento 2의 최종 릴리스 버전에서 작동하는지 확실하지 않습니다.


기본적으로 "별칭"을 기본 설정으로 바꾸고 맨 위로 이동 한 것 같습니다. 흥미 롭군 설명서의 업데이트가 공개 될 것으로 기대합니다. Peter는 그들이 가지고 있다고 말했지만 적어도 IIRC와 같은 문서 사이트로 밀리지 않았습니다.
davidalger

5

클래스 재 작성이 완전히 제거되고 DI로 대체되었습니다. 다음은 Application Framework 변경 사항 에 대한 섹션입니다 .

Magento 1.x — 노드 : / global // {공장 이름 + "다시 쓰기"리터럴에 해당하는 하위 경로}

<global>
...
    <models>
        <core>
            <rewrite>
                <url>My_Module_Model_Url</url>
            </rewrite>
        </core>
    </models>
...
</global>

Magento 2.x — 노드 : / global / di / aliases

<global>
...
    <di>
        <aliases>
            <Mage_Core_Model_Url>My_Module_Model_Url</Mage_Core_Model_Url>
        </aliases>
    </di>
...
</global>

Magento 2.0에서 실행되는 모듈에서 이것을 사용하려고 시도하지 않았지만 모듈 당 다시 쓰기에 복잡한 xml 계층을 사용하는 대신 기본적으로 클래스 이름의 별칭을 정의하는 것으로 보입니다.


1
Application Framework 페이지의 경우 +1이지만 최신 Magento 2 스냅 샷에서는 작동하지 않습니다.
Alan Storm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.