Magento开发之依赖编译

更新

什么时候需要运行 setup:di:compile

在Magento 2中,setup:di:compile是一个命令行工具,用于编译Magento 2的依赖注入(Dependency Injection)配置文件。依赖注入是Magento 2中的重要概念,它负责管理Magento 2的对象创建和依赖关系。通过编译依赖注入配置文件,可以提高Magento 2的性能并减少内存使用。

开发过程中,并非每次都改动都必须运行setup:di:compile命令,但如果你修改了有关工厂方法、代理、添加插件或任何代码编译,就需要运行这个命令。setup:di:compile命令会扫描Magento 2中的所有PHP文件,并将依赖注入配置文件编译成一个缓存文件,以提高Magento 2的性能。此命令还会执行其他的编译任务,如生成自动加载文件、验证代码等。

magento setup:di:compile,以便生成必要的文件。这两个选项最终都会在MAGENTO_ROOT/var/generation目录下生成类(如果Magento 2.2+,则为/generated)。

产生了哪些类?

  • Factories
  • Proxies
  • Plugins

Factories

Factories用于实例化不能自动注入的对象。例如,一个产品对象必须从数据库中加载,但依赖性注入容器没有足够的信息来创建这个对象。这就是为什么我们使用工厂。

Proxies

Magento 2使用构造器注入,其中所有的依赖都是必需的。如果不传递所有的依赖关系,你就不能实例化一个对象。如果你想拥有可选的依赖关系呢?这就是代理存在的原因。

插件Plugins(拦截器Interceptors)

插件 Plugins 是Magento 2的主要定制机制 (primary customization mechanisms ),不再需要重写类。它允许你在应用的任何公共方法之前、之后或周围钩住并做一些事情。

当你运行setup:di:compile命令时,它会做以下事情

  • Application code generation (factories, proxies, and so on)
  • Area configuration aggregation (that is, optimized dependency injection configurations per area)
  • Interceptor generation (that is, optimized code generation of interceptors)
  • Interception cache generation Repositories code generation (that is, generated code for APIs)
  • Service data attributes generation (that is, generated extension classes for data objects)