Magento 2: quali sono i file degli intercettori in var / generation?


24

Quindi ho notato alcuni Interceptor.phpfile invar/generation

So che questa cartella contiene classi generate create al volo per le seguenti:

  • fabbriche
  • Proxy
  • plugin

Presumo che i file di Interceptor siano collegati a quelli del plugin, tuttavia a volte non capisco come vengono generati quei file. Ad esempio ho var/generation/Magento/Framework/App/Response/Http/Interceptor.phpma questo file non sembra corrispondere a nessuna classe esistente.

Quindi sto cercando un flusso di lavoro ben spiegato su come vengono generati i file Interceptor.php?

Risposte:


32

Le classi Interceptor sono un'implementazione del modello di progettazione dell'interceptor . Gli intercettori sono come il sistema a oggetti di Magento 2 implementa un sistema di plugin .

Come sviluppatore client, la teoria è che non devi preoccuparti degli intercettori: chiedi al gestore oggetti un oggetto di tipo X e te lo restituisce. L'oggetto richiesto può essere o meno un intercettore, ma dal punto di vista del programmatore client si comporta come la versione non-intercettore. Come il gestore oggetti decide di restituire o meno un intercettore in un dettaglio di implementazione.

Per le persone interessate a quel dettaglio di implementazione - se una classe, o una classe genitrice di quella classe, ha un plugin configurato, il gestore oggetti restituisce un intercettore. Puoi vederlo nella classe intercettore in modalità sviluppatore qui

#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;
}

Per la produzione (ovvero la modalità compilata), Magento esegue una scansione preliminare del sistema durante la modalità di compilazione e prende nota delle classi che richiedono plug-in.

Per quanto riguarda la generazione attuale, Magento gestisce questo con un caricatore automatico PHP. Se uno sviluppatore crea un'istanza di una classe (o in caso contrario attiva un evento di caricamento automatico PHP con un nome di classe (in un suggerimento di tipo, class_existsclasse, ecc.) E il caricatore automatico basato sul compositore non riesce a trovare il file di classe, un secondo caricatore automatico registrato

Magento\Framework\Code\Generator\Autoloader::load

E 'attivato. Questo caricatore automatico

vendor/magento/framework/Code/Generator/Autoloader.php

cercherà (indirettamente tramite la Magento\Framework\Code\Generatorclasse) la ricerca di determinati modelli di denominazione. Se il nome della classe finisce Interceptor, Magento finisce per generare un Interceptor tramite il generateClassmetodo in questa classe

vendor/magento/framework/Code/Generator.php

Ci sono ulteriori classi / oggetti da rintracciare dal Magento\Framework\Code\Generator- ma lo lasceremo come esercizio per il lettore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.