什么时候需要运行 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)