In Magento 2, quando crei un plugin "around"
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
puoi passare al prossimo plug-in intorno, che termina con la chiamata del metodo originale effettivo, chiamando / invocando il $proceed
metodo passato . Questo è un modello di progettazione comune, spesso visto nelle implementazioni del middleware di PHP Frameworks.
Tuttavia, presenta un po 'di confusione nei dettagli dell'implementazione. In particolare
Se, oltre a
aroundPlugin
, un oggetto / classe ha unbefore
o unafter
plugin definito, quando si attivano in relazione alla catena dei plugin intorno?
vale a dire che tutti i metodi precedenti verranno attivati prima che vengano attivati i metodi plug-in intorno? O prima che i plugin si attivino solo prima che venga attivato l'ultimo metodo reale ?
Il problema specifico che sto cercando di rintracciare è che non riesco a ottenere un plug-in collegato al metodo di spedizione un front controller Magento 2 quando Magento è in modalità cache a pagina intera . L'intera cache della pagina funziona con un plugin around che non chiama $proceed($response)
. Ho provato a scavare in alcuni dei codici attorno a questi plugin e ho trovato il sistema difficile da ragionare senza sapere come funzionassero i plugin.
vale a dire - la descrizione nella pagina dei documenti di sviluppo appare, in questo caso specifico, inaccurata. Non è chiaro se la documentazione sia errata o se si tratta di un bug introdotto di recente, se si tratta di un caso limite o se la mia configurazione del plugin è errata.
Qualcuno sa, per osservazione diretta o per conoscenza culturale, come dovrebbe funzionare questa definizione delle priorità?
\closure $proceed
vs.\callable $proceed
in un plugin? Il documento ufficiale menziona solo\callable
e non tocca mai\closure
.