Magento 2에서 "주변"플러그인을 만들 때
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
전달 된 메소드 를 호출 / 호출하여 실제 원래 메소드를 호출하여 다음 단계의 플러그인으로 진행할 수 있습니다 $proceed
. 이것은 일반적인 디자인 패턴이며, 종종 PHP 프레임 워크 미들웨어 구현에서 볼 수 있습니다.
그러나 구현 세부 사항에 혼란이 있습니다. 구체적으로
에 추가
aroundPlugin
하여 객체 / 클래스에before
또는after
플러그인이 정의되어 있으면 언제 주변 플러그인 체인과 관련하여 실행됩니까?
즉, 모든 플러그인 메소드는 플러그인 메소드가 실행되기 전에 실행됩니까? 또는 의지 플러그인 전에 만 최종 실제 전에 화재 실제 방법 화재?
내가 추적하려고하는 특정 문제는 Magento 가 전체 페이지 캐싱 모드에있을 때 디스패치 방법에 Magento 2 전면 컨트롤러에 연결된 플러그인을 얻을 수없는 것 입니다. 전체 페이지 캐시는 호출 하지 않는 around 플러그인에 의해 작동합니다 $proceed($response)
. 나는이 플러그인 주위의 코드 중 일부를 파고 들었고 플러그인의 작동 방식을 모른 채 시스템이 추론하기가 어렵다는 것을 알았습니다.
즉 , dev docs 페이지 의 설명 이이 특정 인스턴스에서 정확하지 않은 것으로 나타납니다. 설명서가 잘못되었는지 또는 최근에 소개 된 버그인지, 엣지 케이스인지, 플러그인 구성이 잘못된 지 확실하지 않습니다.
누구든지, 직접 관찰 또는 문화 지식을 통해이 우선 순위 지정이 어떻게 작동해야하는지 알고 있습니까?
\closure $proceed
vs. 를 사용할 때 경험할 규칙이\callable $proceed
있습니까? 공식 문서는 단지 언급\callable
과에 닿지 않게\closure
.