Vorrei avvolgere la testa usando gli attributi di estensione, ad esempio per le voci di preventivo.
Non è un problema aggiungere un attributo personalizzato a tale entità usando una classe di installazione come in Magento 1, non è questo il problema.
Al momento la magia mi travolge quando voglio esporre un tale attributo che è stato aggiunto da un'estensione tramite l'API delle entità come attributo di estensione.
AGGIORNAMENTO : so come vengono generate le fabbriche regolari. Questa domanda riguarda le fabbriche speciali che istanziano le implementazioni generate per le interfacce degli attributi di estensione generati.
Ecco i passaggi che faccio per farlo funzionare. Sto aggiungendo questi in modo che chiunque tenti di rispondere non abbia bisogno di entrare in quei dettagli.
La mia domanda è COME o PERCHÉ funziona.
Passaggi per esporre un attributo di estensione tramite un'API di entità:
- Creare un
etc/extension_attributes.xml
che aggiunge l'attributo all'interfaccia entità - Crea un plug-in per aggiungere il valore dell'attributo
ExtensionAttributes
all'istanza delle entità .
Per fare il secondo punto, ExtensionAttributes
è necessaria l' istanza delle entità . Per questo motivo il plugin dipende da una factory, che il gestore oggetti fornisce tramite DI.
Per la citazione Magento\Quote\Api\Data\CartItemExtensionFactory
deve essere usato un esempio.
Immagino che il tipo di questa fabbrica debba in qualche modo essere l'innesco della magia della generazione.
Magento genera quindi l'interfaccia di corrispondenza \Magento\Quote\Api\Data\CartItemExtensionInterface
con i setter e i getter per tutti gli attributi di estensione.
Tuttavia, non sembra generare l'implementazione concreta per quell'interfaccia. Al momento del noleggio PHPStorm non lo vede.
In che modo Magento raccoglie le informazioni necessarie per generare la classe? Come si possono chiamare i metodi di interfaccia generati su un'istanza concreta? È una classe che viene generata solo in memoria?
Sono felice che funzioni, ma non è molto soddisfacente. La capacità di Magentos di utilizzare gli attributi creati automaticamente dalle estensioni è un fattore chiave per il suo successo. Come sviluppatore di moduli, credo di aver bisogno di una conoscenza approfondita dell'intero processo.
Dovrei avere il tempo di scavare in questo me stesso, ma preferirei se solo potessi ottenere una spiegazione.
AGGIORNAMENTO 2 : ci è voluto un po 'di tempo per leggere \Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator
e \Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator
. Ora ho almeno un'idea approssimativa di quello che sta succedendo. Se nessuno mi batte, scriverò una descrizione dell'intero processo ad un certo punto, poiché penso che sarebbe un utile riferimento.