Magento 2: var / neslinde Interceptors dosyası nedir?


24

Bu yüzden bazı Interceptor.phpdosyaları fark ettimvar/generation

Bu klasörün aşağıdakiler için anında oluşturulan oluşturulmuş sınıfları içerdiğini biliyorum:

  • Fabrikalar
  • Proxy
  • eklentiler

Interceptor dosyalarının eklentilere bağlı olduğunu sanıyorum, ancak bazen bu dosyaların nasıl oluşturulduğunu anlamıyorum. Mesela aldım var/generation/Magento/Framework/App/Response/Http/Interceptor.phpancak bu dosya mevcut herhangi bir sınıfla eşleşmiyor.

Bu yüzden Interceptor.php dosyalarının nasıl oluşturulduğuna dair iyi açıklanmış bir iş akışı arıyorum?

Yanıtlar:


32

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_existssı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\GeneratorBazı sınıflandırma modellerini sınıftan dolaylı olarak sınıf üzerinden tarayacaktır. Sınıf ismi sona ererse Interceptor, Magento generateClassbu 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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.