W Magento 2, kiedy tworzysz wtyczkę „około”
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
możesz przejść do następnej wtyczki, kończąc się wywołaniem rzeczywistej oryginalnej metody, poprzez wywołanie / wywołanie przekazanej $proceed
metody. Jest to powszechny wzorzec projektowy, często spotykany w implementacjach oprogramowania pośredniego PHP Frameworks.
Jednak - wprowadza pewne zamieszanie w / r / t w szczegółach implementacji. konkretnie
Jeśli oprócz
aroundPlugin
obiektu zdefiniowano obiekt lub klasębefore
lubafter
wtyczkę, kiedy są one uruchamiane w odniesieniu do łańcucha wokół wtyczek?
tj. czy wszystkie wcześniejsze metody zostaną uruchomione przed uruchomieniem jakichkolwiek metod wtyczek? Czy będzie przed wtyczek tylko ogień przed końcowym, faktycznych prawdziwe pożary metoda?
Konkretnym problemem, który próbuję wyśledzić, jest to, że nie mogę uzyskać wtyczki dołączonej do metody wysyłania przedniego kontrolera Magento 2, gdy Magento jest w trybie buforowania pełnej strony . Pamięć podręczna pełnej strony działa przy użyciu wtyczki wokół, która się nie wywołuje $proceed($response)
. Próbowałem zagłębić się w część kodu wokół tych wtyczek i znalazłem system trudny do uzasadnienia, nie wiedząc, w jaki sposób to działa.
tj. - opis na stronie dokumentacji programistów wydaje się, w tym konkretnym przypadku, niedokładny. Nie jest jasne, czy dokumentacja jest nieprawidłowa, czy jest to niedawno wprowadzony błąd, czy jest to przypadek krawędziowy, czy też moja konfiguracja wtyczki jest nieprawidłowa.
Czy ktoś wie, poprzez bezpośrednią obserwację lub wiedzę kulturową, jak powinna działać ta hierarchizacja?
\closure $proceed
kontra\callable $proceed
we wtyczce? Oficjalny doc tylko wspomina\callable
i nigdy nie dotyka\closure
.