集装箱建造流程

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.2,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

集装箱建造流程

与依赖注入组件相关的文件和类的位置取决于你想要在其中使用容器的应用程序、库或框架。查看容器是如何在Symfony全堆栈框架中配置和构建的,这将帮助您了解所有这些是如何组合在一起的,无论您是使用全堆栈框架欧宝娱乐app下载地址还是希望在另一个应用程序中使用服务容器。

全栈框架使用HttpKernel组件来管理从应用程序和包中加载服务容器配置,并处理编译和缓存。即使您没有使用HttpKernel,它也应该让您了解在模块化应用程序中组织配置的一种方法。

使用缓存容器

在构建容器之前,内核会检查容器的缓存版本是否存在。HttpKernel有一个调试设置,如果这个设置为false,缓存的版本就会被使用。如果debug为true,则内核检查配置是否为新的如果是,则使用容器的缓存版本。如果不是,那么容器将从应用程序级配置和bundle的扩展配置构建。

转储性能配置欲知详情。

应用程序配置

应用程序级配置从配置目录中。加载多个文件,然后在处理扩展名时合并这些文件。这允许针对不同的环境进行不同的配置,例如dev, prod。

这些文件包含参数和服务,这些参数和服务将直接加载到容器中使用配置文件设置容器.它们还包含由扩展处理的配置使用扩展管理配置.这些被认为是包配置,因为每个包包含一个扩展类。

带扩展的包级配置

按照惯例,每个bundle包含一个Extension类,这个类在bundle的DependencyInjection目录中。这些都是在ContainerBuilder当内核启动时。当ContainerBuilder编译,与bundle扩展相关的应用程序级配置被传递给扩展,扩展通常也加载自己的配置文件,通常是从bundle的配置文件资源/配置目录中。应用程序级配置通常使用配置对象也存储在bundle的DependencyInjection目录中。

编译器传递允许包之间的交互

编译器用于允许不同bundle之间的交互,因为它们在扩展类中不会影响彼此的配置。其中一个主要用途是处理带标记的服务,允许包注册服务以被其他包接收,例如Monolog记录器,Twig扩展和Web分析器的数据收集器。编译器传递通常放在包的DependencyInjection /编译器目录中。

编译和缓存

在编译过程从配置、扩展和编译器传递中加载服务之后,它将被转储,以便下次可以使用缓存。然后在后续请求中使用转储版本,因为它更有效。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。