마 젠토 2 : 어떤 확장 메커니즘을 선택해야합니까?


9

환경 설정과 플러그인 사용의 두 가지 방법으로 컨트롤러를 확장 할 수 있습니다. 그러나 나는 어느 것이 좋으며 선호도 대 플러그인의 장점 / 단점을 이해하지 못한다.

<preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" />

<type name="Magento\Catalog\Model\Product">
    <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/>
</type>

가능한 마 젠토 2
7ochem

답변:


11

가능하면 플러그인을 사용하고 관찰자 ( 각 장단점 참조 )를 사용하면 다른 확장 (타사 모듈)과의 충돌을 피할 수 있습니다.

전체 코어 클래스 / 인터페이스 구현을 사용자 정의 클래스로 대체해야하는 경우에만 환경 설정을 사용해야합니다. 언제든 하나의 환경 설정 만 활성화됨을 고려하십시오 (하나는에 정의 된 순서로 정의 됨 module.xml). 다른 확장이 동일한 클래스 / 인터페이스에 대한 환경 설정을 정의하면 충돌이 발생합니다 (이 확장은 함께 작동 할 수 없음).


4
  • 기능이 핵심 기능을 완전히 대체하는 경우 기본 설정을 사용할 수 있습니다.
  • 기본에 기능을 추가하거나 일부 클래스 메소드를 부분적으로 바꾸려면 플러그인을 사용하십시오.

1
당신은 핵심 기능을 대체하는 경우 핵심 업데이트를 모니터링하고 사용자 정의 모듈 보장을 최신 상태로하기에 그 부담이 있음을 참고 신중한 보인다
로비 에버 릴을

1

추가 정보 : 인턴 m2에서 사용되는 거의 모든 환경 설정은 다음과 같이 기본 콘크리트 클래스와 인터페이스 간의 관계를 유지하기위한 것입니다.

<preference for="Magento\Store\Model\StoreManagerInterface" type="Magento\Store\Model\StoreManager" />

당신이 생각하는 것처럼 한 번 사용됩니다.

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.