In Magento 2, wenn Sie ein "Around" -Plugin erstellen
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
Sie können mit dem nächsten Plugin fortfahren und die eigentliche ursprüngliche Methode aufrufen, indem Sie die übergebene $proceedMethode aufrufen / aufrufen . Dies ist ein häufig vorkommendes Entwurfsmuster, das häufig in Middleware-Implementierungen von PHP Frameworks auftritt.
Es gibt jedoch einige Verwirrung hinsichtlich der Implementierungsdetails. Speziell
Wenn für ein
aroundPluginObjekt / eine Klasse zusätzlich zu einem einbeforeoder einafterPlugin definiert wurde, wann werden sie in Bezug auf die Kette um Plugins ausgelöst?
dh werden alle Before-Methoden ausgelöst, bevor irgendwelche Around-Plugin-Methoden ausgelöst werden? Oder werden vor Plugins nur vor der endgültigen, tatsächlichen realen Methode ausgelöst?
Das spezifische Problem, das ich aufzuspüren versuche, ist, dass ich anscheinend kein Plugin an die Versandmethode eines Magento 2 Front-Controllers anhängen kann, wenn sich Magento im Ganzseiten-Caching-Modus befindet . Der Ganzseiten-Cache wird von einem Around-Plugin betrieben, das nicht aufgerufen wird $proceed($response). Ich habe versucht, einen Teil des Codes um diese Plugins herum zu studieren, und es fiel mir schwer, über das System nachzudenken, ohne zu wissen, wie es funktionieren soll.
dh - die Beschreibung auf der Seite dev docs scheint in diesem speziellen Fall ungenau zu sein. Es ist unklar, ob die Dokumentation falsch ist oder ob es sich um einen kürzlich eingeführten Fehler handelt, ob es sich um einen Randfall handelt oder ob meine Plugin-Konfiguration falsch ist.
Weiß jemand, durch direkte Beobachtung oder durch kulturelles Wissen, wie diese Priorisierung funktionieren soll?
\closure $proceedvs.\callable $proceedin einem Plugin verwenden sollst ? Das offizielle Dokument erwähnt nur\callableund berührt nie\closure.