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 $proceed
yö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
aroundPlugin
nesneye ek olarak , bir nesnenin / sınıfın tanımlanmış birbefore
veyaafter
eklentisi 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 $proceed
vs\callable $proceed
bir eklenti? Resmi doc sadece bahseder\callable
ve üzerinde asla dokunmaz\closure
.