Quels (types de) classes sont générés dans Magento 2?

9

Dans Magento 2, il existe un ensemble de classes qui sont générées automatiquement et stockées dans var/generationet elles sont utilisées dans le code principal.
En essayant de créer un module personnalisé en répliquant l'un des modules de base, j'ai vu que pour mon module également, il y avait des classes générées.
Dans les classes générées, j'ai vu des proxys, des intercepteurs, des usines ....

Existe-t-il une liste complète des classes ou types de classes générées automatiquement?
Et comme question secondaire ... quand / où sont-ils générés?

Marius
la source

Réponses:

9

Il existe différentes raisons pour générer différentes entités:

Proxy - il est utilisé pour le chargement paresseux. Mais chaque type nécessite une classe proxy distincte, ce qui serait gênant pour les développeurs de les écrire manuellement pour que Magento les génère. Vous ne trouverez que des références aux proxys dans di.xml

Factory - est une classe utilisée pour créer des non-injectables (entités). Identique aux procurations. PHP n'a pas encore de génériques, nous générons donc automatiquement des usines pour que le développeur n'écrive pas de code standard. Vous interagirez avec les usines à travers le code Magento. Très probablement, vous aurez besoin de vos propres usines pour vos entités. Demandez simplement la fabrique correspondante dans le constructeur et elle sera générée lors de la prochaine exécution ou lors de l'exécution du compilateur.

Interceptor - est une classe d'infrastructure, qui est utilisée par le composant Interception. Comme Flyingmana et Phil Winkle l'ont remarqué, vous ne devez en aucun cas interagir avec eux.

Il y a un tas d'autres entités générées (comme Logger pour le mode de profilage de graphe d'objet) mais ces 3 sont les plus importantes.

Magento 2 peut également être compilé. La compilation accélère DI et interception. Toute la génération et la compilation de code peuvent être effectuées avec dev / tools / Magento / Tools / Di / compiler.php

Anton Kril
la source
2

Du concept:

Vous n'avez pas besoin de savoir quel type de classes est généré automatiquement, car vous n'avez jamais à les toucher ou à les utiliser, pas même vous.

Ils sont (encore?) Générés à la volée, mais devraient plus tard être générés via la commande cli ou similaire.

La liste des types existants pourrait s'allonger à tout moment, lorsque les pièces internes en auront besoin d'une nouvelle. Mais leur accès se produirait toujours caché derrière les API documentées normales (communément appelées appels de fonction)

Flyingmana
la source
1
Je ne suis pas sûr de "ou de les utiliser". Voici un exemple: Dans Magento\Cms\Block\Blockle constructeur, une instance de \Magento\Cms\Model\BlockFactoryest utilisée. Cette classe n'est nulle part dans le code. Il se trouve uniquement dans var/generation. Donc, si je fais un module similaire, je devrai peut-être utiliser une classe similaire.
Marius
2

C'est ainsi que Magento génère l'approche orientée aspect de la nouvelle plateforme; en générant réellement les "événements" avant, autour et après au lieu de les répartir dynamiquement. Cela établit un équilibre de commodité pour le programmeur et les performances de la plate-forme.

Certaines techniques telles que l'injection de dépendance automatique sont aplaties dans les classes générées plutôt qu'exécutées par réflexion - encore une fois - c'est une technique pour améliorer les performances.

philwinkle
la source
Merci d'avoir expliqué le "pourquoi?", Mais mes principales questions étaient "quoi?" et où?".
Marius