마 젠토 2 : 플러그인 대 관찰자


27

Magento 2에서 플러그인과 관찰자를 사용하여 무언가를 달성하는 장단점은 무엇입니까?

나는 관찰자가 이벤트를 구독하는 반면 플러그인은 Magento 클래스에서 공개 메소드가 호출되기 전후에 뛰어들 수 있지만 분명히 교차 경로에 매우 근접하고 있음을 알고 있습니까?


관찰자는 매우 제한적이지만 플러그인은 모든 공공 기능에 대한 변경을 수행합니다
Pradeep Kumar

답변:


42

플러그인은 시스템에서 공개 메소드의 동작을 수정 / 대체 할 수 있기 때문에 전적으로 사용됩니다. 사용자 정의는 @api가능할 때마다 주석 (안정된 공용 API)으로 표시된 공용 메소드 / 클래스 용 플러그인을 사용하여 수행해야 합니다. 이러한 접근 방식은 새로운 마 젠토가 출시 된 후에도 커스터마이제이션이 계속 작동하도록 보장합니다. 질문에 언급 된 before/ after플러그인 외에도 around원래 동작을 대체하는 플러그인을 만들 수 있습니다.

반면에 옵저버는 Magento 1에서 상속 된 레거시 확장 메커니즘이며, 매우 제한적이며 가능한 경우 피해야합니다. 그러나 플러그인과 달리 플러그인은 보호 / 개인 메소드 내에 확장 점을 제공 할 수 있습니다.


또한 환경 설정 대 플러그인 / 관찰자에 대한 답변을 살펴보십시오 : magento.stackexchange.com/a/94035/697 , 유용 할 수 있습니다.
Alex Paliarush 2016

@alex :-보호 된 기능을위한 플러그인을 작성하는 방법, 대부분의 경우 우리는 그 상황에서 보호 된 기능을 재정의해야합니까? magento.stackexchange.com/questions/91353/…
Pradeep Kumar

@PradeepKumar 플러그인은 공용 메소드에만 추가 할 수 있습니다. 언급 한 질문에 대한 답변이 있지만 제안 된 솔루션은 차단되었지만 알려진 문제입니다 (가상 유형에는 플러그인을 적용 할 수 없음). 임시 해결 방법으로 프레임 워크 URL 클래스에 대한 플러그인을 선언하고 인수를 기반으로 조건부 논리를 추가 할 수 있습니다 (플러그인이 사용자의 경우에만
수행함

나는 하나의 예를 들었다. 보호 된 기능을 재정의하는 방법으로 재정의하는 방법에는 보호 기능이 많이있다
Pradeep Kumar

@PradeepKumar 보호 된 메소드를 재정의해야하는 경우 클래스를 확장하고 환경 설정 / 다시 쓰기를 사용해야합니다. 어쨌든, 당신은 이러한 의견 대신에 질문을 제안하십시오
로비 애 버릴

1

Magento 기술 안내서 ( https://devdocs.magento.com/guides/v2.1/coding-standards/technical-guidelines.html#14-events ) 에 따르면 : 이벤트에 전달 된 모든 값 (객체 포함)은 이벤트 옵저버에서 수정되었습니다. 대신, 플러그인은 함수의 입력 또는 출력을 수정하는 데 사용해야합니다.

나를 위해 플러그인과 관찰자의 주요 차이점은 다음과 같습니다.

  1. 플러그인은 공개 메소드 만 수정할 수 있지만 관찰자는 개인용으로도 보호 할 수 있습니다.
  2. 플러그인에는 정렬 순서가 있지만 관찰자에는 정렬 순서가 없습니다.
  3. Magento에서 이미 전달 된 이벤트에만 관찰자를 추가 할 수 있습니다. 플러그인은 여기에서 더 유연합니다.

나는 또한 관찰자로 주문을 업데이트 할 수 있습니까?
로비 애 버릴

@RobbieAverill 예, checkout_submit_all_after이벤트에 대한 관찰자를 만들 수 있습니다 . 주문이 완료되면 관찰자가 시작됩니다.
transversus

이 경우“데이터를 수정하지 않습니다”가 사실이 아닙니까?
로비 애 버릴

1
네 맞습니다. @RobbieAverill 플러그인과 관찰자 모두 데이터를 수정할 수 있습니다. 플러그인과 옵저버의 주요 차이점은 다음과 같습니다. 1. 플러그인은 퍼블릭 메서드 만 수정할 수 있지만 옵저버는 개인용 보호 기능도 수정할 수 있습니다. 2. 플러그인에는 정렬 순서가 있지만 관찰자에게는 정렬 순서가 없습니다. 3. Magento에서 이미 발송 된 이벤트에만 관찰자를 추가 할 수 있습니다. 플러그인은 여기에서 더 유연합니다.
가로
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.