Trong Magento 2, khi bạn tạo một plugin "xung quanh"
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
bạn có thể tiến hành plugin tiếp theo xung quanh, kết thúc bằng cách gọi phương thức gốc thực tế, bằng cách gọi / gọi $proceed
phương thức đã truyền trong phương thức. Đây là một mẫu thiết kế phổ biến, thường thấy trong các triển khai phần mềm trung gian của PHP Frameworks.
Tuy nhiên - nó hiện một số nhầm lẫn w / r / t với các chi tiết thực hiện. Đặc biệt
Nếu, ngoài một
aroundPlugin
, một đối tượng / lớp có mộtbefore
hoặc mộtafter
plugin được xác định, khi nào chúng bắn liên quan đến chuỗi các plugin xung quanh?
tức là tất cả các phương thức trước sẽ kích hoạt trước khi bất kỳ phương thức plugin nào kích hoạt? Hoặc trước khi các plugin chỉ bắn trước khi phương thức thực sự cuối cùng thực hiện ?
Vấn đề cụ thể mà tôi đang cố gắng theo dõi là, dường như tôi không thể có một plugin được gắn vào phương thức điều phối bộ điều khiển phía trước Magento 2 khi Magento ở chế độ bộ đệm toàn trang . Bộ đệm toàn bộ trang hoạt động bởi một plugin xung quanh không gọi $proceed($response)
. Tôi đã thử đào sâu vào một số mã xung quanh các plugin này và nhận thấy hệ thống khó lý do mà không biết các plugin đó hoạt động như thế nào.
tức là - mô tả trên trang dev docs xuất hiện, trong trường hợp cụ thể này, là không chính xác. Không rõ liệu tài liệu này có sai hay không, nếu đây là một lỗi được giới thiệu gần đây, nếu đó là một trường hợp cạnh hoặc nếu cấu hình plugin của tôi sai.
Có ai biết, bằng cách quan sát trực tiếp, hoặc bằng kiến thức văn hóa, làm thế nào ưu tiên này được cho là hoạt động?
\closure $proceed
so với\callable $proceed
trong một plugin không? Các tài liệu chính thức chỉ đề cập\callable
và không bao giờ chạm vào\closure
.