Вопрос

В Magento 2 есть набор классов, которые генерируются автоматически и сохраняются в var/generation и они используются в основном коде.
Пытаясь создать собственный модуль путем репликации одного из основных модулей, я увидел, что для моего модуля также есть несколько сгенерированных классов.
В сгенерированных классах я видел прокси, перехватчики, фабрики....

Есть ли полный список классов или типов классов, которые генерируются автоматически?
И еще один побочный вопрос... когда/где они генерируются?

Это было полезно?

Решение

Существуют разные причины для создания разных сущностей:

Прокси - используется для отложенной загрузки.Но для каждого типа требуется отдельный прокси-класс, поэтому разработчикам было бы неприятно писать их вручную, чтобы Magento генерировал их.Вы найдете ссылки на прокси только в di.xml.

Фабрика — это класс, который используется для создания неинъекционных объектов (сущностей).То же, что прокси.В PHP пока нет дженериков, поэтому мы автоматически генерируем фабрики, чтобы не заставлять разработчика писать шаблонный код.Вы будете взаимодействовать с фабриками через код Magento.Скорее всего, вам потребуются собственные заводы для ваших предприятий.Просто запросите соответствующую фабрику в конструкторе, и она будет сгенерирована при следующем запуске или во время запуска компилятора.

Перехватчик — инфраструктурный класс, используемый компонентом «Перехват».Как заметили Флаингмана и Фил Винкль, с ними взаимодействовать ни в коем случае не следует.

Создано множество других объектов (например, Logger для режима профилирования графа объектов), но эти три наиболее важны.

Magento 2 также можно скомпилировать. Сборник ускоряет DI и перехват.Всю генерацию и компиляцию кода можно выполнить с помощью dev/tools/Magento/Tools/Di/compiler.php.

Другие советы

Из концепции:

Вам не нужно знать, какой тип классов генерируется автоматически, поскольку вам никогда не придется их трогать или использовать, даже не нужно.

Они (все еще?) генерируются на лету, но позже должны быть сгенерированы с помощью команды cli или аналогичной.

Список существующих типов может расшириться в любой момент, когда внутренним частям потребуется новый.Но доступ к ним всегда будет скрыт за обычными документированными API (широко известными как вызовы функций).

Именно так Magento генерирует аспектно-ориентированный подход к новой платформе;путем фактической генерации «событий» до, вокруг и после вместо их динамической отправки.Это обеспечивает баланс между удобством для программиста и производительностью платформы.

Некоторые методы, такие как автоматическое внедрение зависимостей, сводятся к сгенерированным классам, а не выполняются посредством отражения — опять же, это метод повышения производительности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top