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

是否有自动生成的类或类类型的完整列表?
作为一个侧面的问题。..它们何时/在何处生成?

有帮助吗?

解决方案

产生不同实体有不同的原因:

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

工厂 -是一个用于创建非注入(实体)的类。和代理一样。PHP还没有泛型,所以我们自动生成工厂,不让开发人员编写样板代码。您将跨Magento代码与工厂进行交互。很可能你需要你自己的工厂为你的实体。只需在构造函数中询问相应的工厂,它将在下次运行或编译器运行期间生成。

拦截器 -是一个基础结构类,由拦截组件使用。正如Flyingmana和Phil Winkle注意到你无论如何都不应该与他们互动。

还有一堆其他实体生成(如对象图分析模式的记录器),但这3个是最重要的。

Magento2也可以编译。 汇编 使DI和拦截更快。所有代码生成和编译都可以使用dev/tools/Magento/Tools/Di/compiler完成。php的

其他提示

从概念:

你不需要知道哪种类型的类会自动生成,因为你永远不必触摸或使用它们,甚至不应该。

他们得到(仍然?)即时生成,但稍后应通过cli命令或类似命令生成。

当内部部件需要一个新的类型时,存在的类型列表可以随时增长。但是对它们的访问总是隐藏在正常记录的Api(通常称为函数调用)后面

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

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

许可以下: CC-BY-SA归因
scroll top