Di Magento 2, saat Anda membuat plugin "sekitar"
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
Anda dapat melanjutkan ke plugin selanjutnya, yang berpuncak dengan memanggil metode asli yang sebenarnya, dengan memanggil / memanggil metode yang dilewatkan $proceed
. Ini adalah pola desain umum, sering terlihat dalam implementasi middleware PHP Frameworks.
Namun - itu memang menghadirkan beberapa kebingungan w / r / t untuk detail implementasi. Secara khusus
Jika, di samping sebuah
aroundPlugin
, sebuah objek / kelas memilikibefore
atauafter
plugin yang ditentukan, kapan mereka memecat sehubungan dengan rantai sekitar plugin?
yaitu apakah semua metode sebelumnya akan menyala sebelum ada metode plugin yang menyala? Atau akankah sebelum plugin hanya menembak sebelum final, metode nyata yang sebenarnya akan menyala?
Masalah khusus yang saya coba lacak adalah, sepertinya saya tidak bisa mendapatkan plugin yang terpasang pada metode pengiriman pengontrol depan Magento 2 saat Magento dalam mode caching halaman penuh . Tembolok halaman penuh beroperasi oleh plugin sekitar yang tidak memanggil $proceed($response)
. Saya sudah mencoba menggali ke dalam beberapa kode di sekitar plugin ini dan telah menemukan sistem sulit untuk dipikirkan tanpa mengetahui bagaimana maksudnya bahwa plugin bekerja.
yaitu - deskripsi pada halaman dev docs muncul, dalam satu contoh khusus ini, menjadi tidak akurat. Tidak jelas apakah dokumentasinya salah, atau apakah ini bug yang baru saja diperkenalkan, apakah ini kasus tepi, atau apakah konfigurasi plugin saya salah.
Adakah yang tahu, dengan pengamatan langsung, atau dengan pengetahuan budaya, bagaimana penentuan prioritas ini berfungsi?
\closure $proceed
vs.\callable $proceed
dalam sebuah plugin? Dokumen resmi hanya menyebutkan\callable
dan tidak pernah menyentuh\closure
.