magento2의 차단이 magento1의 관찰자를 대체합니까?


9

관찰자가 magento1에 있었던 것처럼 Magento2에서 원래 방법의 동작 변경을 처리 할 때 차단이 선호되는 방법입니까?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception

답변:


16

나는 가로 채기가 이벤트 관찰자를 대체하기위한 것이 아니라고 생각합니다.
Magento2 코드에는 여전히 이벤트가 전달됩니다.

인터셉터는 메소드의 입력 또는 출력을 처리하는 방법 일뿐입니다.
또는 ( around인터셉터를 사용하는) 메소드의 동작 이지만 이것이 내가 이해하는 것은 위험한 접근법입니다.

클래스 재 작성을 가능한 많이 피하는 방법이라고 생각합니다.
Magento 1.x에서 메소드 결과를 수정해야하는 경우 포함 된 클래스와 메소드 자체를 대체해야했습니다.
지금 당신은 간단하게 사용할 수 있습니다 before, after또는 around데이터를 조작하는 인터셉터.

옵저버를 사용하면 전체 메서드 자체가 아니라 메서드의 특정 고정 지점에서 데이터를 조작 할 수 있습니다.

제 생각에는, 가능하면 옵저버를 사용하는 것이 여전히 Magento 2에서도 커스터마이징을위한 최선의 방법입니다.


2
동의하다. 차단은 낮은 수준의 메커니즘입니다. 그러나 이벤트를 대체하지는 않습니다. 이벤트는 더 높은 수준의 서비스 제공 업체 인터페이스를 제공합니다
Anton Kril

6

차단은 사건의 진화입니다. 그것의 목표는 개발자가 확장 점을 생각하지 않고 코드를 작성할 수 있도록하는 것입니다.

이벤트를 사용하면 Mage :: dispatchEvent ()를 수행하는 위치를 고려해야 모듈을 사용자 정의 할 수 있습니다.

가로 채기를 사용하면 이에 대해 생각하지 않아도됩니다. 당신은 당신의 사업 논리를 작성합니다. 모든 메소드 호출은 이벤트입니다. 따라서 적절한 객체 지향 방식으로 코드를 작성하면 디자인에 따라 완전히 사용자 정의 할 수 있습니다.

그러나 이벤트는 비즈니스 언어를 말하는 더 높은 수준의 서비스 제공 인터페이스를 제공합니다. 따라서 이벤트는 마 젠토 2에 유지됩니다.


devdocs에서 혼란의 원천 으로이 중요한 사실을 얻을 수 있습니까? 특히 M2에 여전히 많은 이벤트가있는 것으로 보았습니다. 이벤트가 종료되었음을 알면 그에 따라 코딩 할 수 있습니다. 문서에서 이것을 언급하는 곳은 보지 못했습니다. 다른 언어에서는 때때로 이벤트와 인터셉터를 다른 시간에 사용해야하는 이유가 있으므로 Magento 2가 다르다는 것을 분명히해야한다고 생각합니다.
Karen Baker

5

현재 특정 이벤트를 수신하는 옵션이 여전히 있으며 인터셉터는 재 작성을 대체하는 것입니다. 귀하의 필요에 맞는 행사가있을 때에도 행사를 계속 사용합니다.

현재 릴리스를 보면 일부 모듈 events.xml에 정의가 포함 된 파일이 있습니다.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>

Magento-2 최신 버전 옵저버 패턴이 변경되었습니다. 이제 events.xml에 메소드 속성을 선언 할 필요가 없으며, 컨트롤러와 같은 실행 메소드를 자동으로 실행합니다.
Keyur Shah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.