Interceptor sınıfları , interceptor tasarım modelinin bir uygulamasıdır . Yakalayıcılar, Magento 2'nin nesne sisteminin nasıl bir eklenti sistemi uyguladığını gösteriyor .
Bir müşteri geliştiricisi olarak teori, engelleyiciler hakkında endişelenmenize gerek yok - nesne yöneticisinden X tipi bir nesne isteyin ve bunu size geri verir. İstediğiniz nesne bir önleyici olabilir veya olmayabilir, ancak istemci programcının bakış açısına göre önleyici olmayan sürümle aynı şekilde davranır. Nesne yöneticisinin bir önleyiciyi uygulama detayında iade etmeye veya vermemeye nasıl karar verdiği.
Bu uygulama detayıyla ilgilenen kişiler için - eğer bir sınıf veya o sınıfın bir üst sınıfı yapılandırılmış bir eklentiye sahipse, nesne yöneticisi bir önleyiciyi döndürür. Bunu, geliştirici modu önleyici sınıfında burada görebilirsiniz
#File: vendor/magento/framework/Interception/ObjectManager/Config/Developer.php
public function getInstanceType($instanceName)
{
$type = parent::getInstanceType($instanceName);
if ($this->interceptionConfig && $this->interceptionConfig->hasPlugins($instanceName)
&& $this->interceptableValidator->validate($instanceName)
) {
return $type . '\\Interceptor';
}
return $type;
}
Üretim için (yani derlenmiş mod), Magento, derleme modu sırasında sistemi önceden tarar ve hangi sınıfların eklentilere ihtiyaç duyduğunu not eder.
Asıl nesile gelince, Magento bunu bir PHP otomatik yükleyicisiyle işler. Bir geliştirici bir sınıfı başlatırsa (veya başka bir PHP autoload olayını bir sınıf adıyla başlatırsa (bir ipucu, class_exists
sınıf, vb.) Ve besteci tabanlı bir otomatik yükleyici sınıf dosyasını bulamaz, ikinci bir kayıtlı otomatik yükleyici
Magento\Framework\Code\Generator\Autoloader::load
tetiklenir. Bu otomatik yükleyici
vendor/magento/framework/Code/Generator/Autoloader.php
Magento\Framework\Code\Generator
Bazı sınıflandırma modellerini sınıftan dolaylı olarak sınıf üzerinden tarayacaktır. Sınıf ismi sona ererse Interceptor
, Magento generateClass
bu sınıftaki yöntemle bir Interceptor oluşturuyor
vendor/magento/framework/Code/Generator.php
İzlenecek ek sınıflar / nesneler var Magento\Framework\Code\Generator
- ancak bunu okuyucu için bir alıştırma olarak bırakacağız.