Magento 2中生成哪些(类型)类?


9

在Magento 2中,有一组自动生成并存储在其中的类,var/generation它们在核心代码中使用。
在尝试通过复制核心模块之一来创建自定义模块时,我看到对于我的模块,还有一些生成的类。
在生成的类中,我看到了代理,拦截器,工厂...。

是否有自动生成的类的完整列表或类的类型?
附带问题...它们何时/何地生成?

Answers:


9

生成不同实体的原因不同:

代理 -用于延迟加载。但是每种类型都需要单独的代理类,这对于开发人员手动编写它们,从而使Magento生成它们很烦人。您只会在di.xml中找到对代理的引用

Factory-是用于创建不可注射(实体)的类。与代理相同。PHP还没有泛型,因此我们会自动生成工厂,而不是让开发人员编写样板代码。您将通过Magento代码与工厂进行交互。您很可能需要为实体创建自己的工厂。只需在构造函数中请求相应的工厂,它将在下一次运行或在编译器运行期间生成。

Interceptor-是Interception组件使用的基础结构类。正如Flyingmana和Phil Winkle所注意的那样,您无论如何都不应该与他们互动。

生成了许多其他实体(例如用于对象图分析模式的Logger),但是这三个实体最重要。

Magento 2也可以编译。编译使DI和Intercept更快。所有代码生成和编译都可以通过dev / tools / Magento / Tools / Di / compiler.php完成


2

从概念:

您不需要知道自动生成哪种类型的类,因为您不必触摸或使用它们,甚至也不需要。

它们是即时生成的(还是?),但以后应通过cli命令或类似命令生成。

当内部零件需要新零件时,存在类型的清单可能随时增加。但是访问它们总是会隐藏在常规文档化的API(通常称为函数调用)的后面


1
我不确定“或使用它们”。这是一个示例:在Magento\Cms\Block\Block构造函数中使用的实例\Magento\Cms\Model\BlockFactory。该类不在代码中。仅在中找到var/generation。因此,如果我正在执行类似的模块,则可能必须使用类似的类。
马里乌斯

2

这就是Magento如何为新平台生成面向方面的方法的方式。通过实际生成事件之前,周围和之后,而不是动态地调度它们。这在程序员的便利性和平台性能之间取得了平衡。

诸如自动依赖项注入之类的某些技术被展平到生成的类中,而不是通过反射执行-再次-这是一种提高性能的技术。


感谢您解释“为什么?”,但是我的主要问题是“什么?” 和“哪里?”。
马里乌斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.