Kernel->initializeBundles() 初始化Bundle
Kernel->registerBundle() 注册Bundle
Kernel->bundleMap 生成Bundle关系图
Kernel->initializeContainer() 初始化容器(缓存)
Kernel->buildContainer() 建立容器
Kernel->prepareContainer() 预备容器
Bundle->getContainerExtension() 获取Bundle扩展
Bundle->build($container) 编译Bundle
Symfony\Bundle\FrameworkBundle->build($container) 添加了不少 CompilerPassInterface (路由、事件、模板、资源等)
ContainerBuilder-> … ->setMergePass(new MergeExtensionConfigurationPass($extensions)) 设置MergePass(CompilerPassInterface),用于合并Bundle扩展配置
Kernel->registerContainerConfiguration(LoaderInterface $loader) 获取配置、服务
ContainerBundler->compile() 编译容器
$compiler->compile($this);
开始执行 $container->addCompilerPass() 里面的 CompilerPassInterface ,(包括 FrameworkBundle->build($container) 里添加的)
默认从 MergeExtensionConfigurationPass 开始
MergeExtensionConfigurationPass->process($container)
process 包含
BundleExtension->prepend($container); // 必须实现 PrependExtensionInterface 接口才执行该方法
BundleExtension->load($config, $container)
所有 CompilerPassInterface 依次 ->process()
foreach ($this->passConfig->getPasses() as $pass) {
$pass->process($container);
}
foreach(Kernel->getBundles() as $bundle){
Bundle->boot() 启动
}
$reqponse = Kernel->handle() 处理
Container->get('http_kernel')->handle($request)
$response->send();
$kernel->terminate($request, $response)
后续更新 CompilerPassInterface 详细顺序