Magento 2 contient un certain nombre de fichiers de classe pré-générés ou générés à la volée. Ils vivent dans
var/generated
Ces fichiers générés incluent les classes d'usine. D'après ma documentation , un programmeur utilise des classes d'usine pour instancier des objets "non injectables". Un objet "non injectable" est un objet qui ne peut pas être ajouté via __constructor
une injection de dépendance, généralement parce qu'il nécessite une entrée utilisateur pour instancier.
Ce qui n’est pas clair dans la documentation, c’est que Magento 2 sait qu’il doit générer une classe fabrique. Ce bit
Si le gestionnaire d’objets rencontre une fabrique inexistante en mode d’exécution ou un compilateur, le gestionnaire d’objets génère la fabrique.
donne l'impression que, si j'utilise une classe de fabrique dans le gestionnaire d'objets (ou, par extension, dans les dépendances d'injection de dépendances __), Magento 2 le générera pour moi. Mais comment le gestionnaire d'objets sait-il que ce que je demande est une usine?
En outre, il semble y avoir deux commandes pour générer automatiquement (ou "compiler") toutes les classes générées. L'exécution de l'une de ces commandes génère un grand nombre de classes Factory. Quels sont les fichiers de configuration et / ou de code utilisés par ces commandes pour générer les objets d'usine nécessaires?
Je sais que le traçage du gestionnaire d’objets et / ou du code de commande jusqu’au bout l’indiquerait, mais j’espère pouvoir éviter ce long et pénible voyage.
la source
Je suis en train de creuser dans cette même soupe aux pois en ce moment. D'après ce que j'ai compris jusqu'à présent, tout ce qui est généré automatiquement à
/var/generation
partir des préférences et des interfaces déclarées dansapp/etc/di.xml
.di.xml
Vos interfaces et vos préférences vont être déclarées dans le fichier dans votre/app/code/Vendor/<module>/etc/di.xml
.Il sait générer le ou les objets pour vous car vous avez déclaré une interface dans votre
__constructor
AND et déclaré une préférence pour cette interface, globalement ou localement, dans ledi.xml
fichier approprié .Je propose trois grains de sel avec mes commentaires.
la source
di.xml
fichiers - vous pouvez envoyer quelque chose dans le gestionnaire d'objets qui se termine par Factory et il va générer un fichier pour vous.