Magento 2'de "etrafında" bir eklenti oluşturduğunuzda
public function aroundRenderResult(
\Magento\Framework\Controller\ResultInterface $subject,
\Closure $proceed,
ResponseHttp $response
) {
//...
$proceed($response);
//...
}
Eğer yapabilirsiniz Devam geçirilen çağırarak / arayarak, çağrı gerçek orijinal yöntem ile sonuçlanan, bir sonraki etrafında eklentisi için $proceedyöntemle. Bu genellikle PHP Frameworks katman yazılım uygulamalarında görülen yaygın bir tasarım desenidir.
Bununla birlikte - uygulama detaylarına w / r / t bazı karışıklıklar sunar. özellikle
Bir
aroundPluginnesneye ek olarak , bir nesnenin / sınıfın tanımlanmış birbeforeveyaaftereklentisi varsa , bunlar ne zaman eklentiler zinciriyle ilişkili olarak ateşlenir?
yani, önceki tüm yöntemler, herhangi bir eklenti yöntemi etrafındakilerden önce ateşlenir mi? Yoksa eklentilerden önce, yalnızca gerçek, gerçek yöntem ateşlenmeden önce ateşlenir mi?
İzlemeye çalıştığım belirli sorun , Magento tam sayfa önbelleğe alma modundayken , gönderme yöntemine bir Magento 2 ön denetleyicisine eklenmiş bir eklenti bulamıyorum . Tam sayfa önbelleği, çağrı yapmayan bir eklenti ile çalışır $proceed($response). Bu eklentilerin etrafındaki bazı kodların içine girmeye çalıştım ve sistemin bu eklentilerin nasıl çalıştığını bilmeden nedenini zor buldum.
yani - dev docs sayfasındaki açıklama, bu özel örnekte yanlış görünüyor. Dokümantasyonun yanlış olup olmadığı veya bunun kısa süre önce ortaya konan bir hata olup olmadığı, uç bir dava olması veya eklenti konfigürasyonumun yanlış olup olmadığı açık değildir.
Doğrudan öncelikli gözlem ile veya kültürel bilgiyle, bu önceliklendirmenin nasıl çalışması gerektiğini bilen var mı?
\closure $proceedvs\callable $proceedbir eklenti? Resmi doc sadece bahseder\callableve üzerinde asla dokunmaz\closure.