一、请求-响应篇
1.程序启动准备
1.1 服务容器实例化
index.php
入口文件包含了$app = require_once __DIR__.'/../bootstrap/app.php';
这一行代码,app.php
会返回框架的创建的服务容器。这个过程会完成以下几个步骤:
- 服务容器实例化
- 注册服务容器本身
- 注册基础服务提供者
- 基础路径注册
- 核心类别名注册
相关源码在Illuminate\Foundation
目录下的Application.php
文件中。(注:使用的laravel版本:5.1;文中的Illuminate位于 根目录\vendor\laravel\framework\src\ 目录下,为了行文方便,故省略。)
1.2 核心类(Kernel)实例化
在容器实例化之后,便可以通过服务容器自动实例化对象,实例化代码在index.php
中的 $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
。
2.请求实例化
完成了第一步的准备工作之后,需要进行请求的实例化,请求实例的创建是通过Illuminate\Http\Request
类的capture
方法完成的。
3.处理请求
完成请求实例化之后,将进入对请求实例的处理阶段,即$response = $kernel->handle();
通过不同的处理方式可以返回不同的响应结果,从而实现不同的功能。具体请求的处理是通过Kernel.php中的sendRequestThroughRouter方法实现的。
3.1请求处理准备工作
这个准备过程大致包含:环境监测、配置加载、日志配置、异常处理、外观注册、服务提供者注册、启动服务 这7大步骤。在Illuminate\Foundation\Http\Kernel.php
中的$bootstrappers
属性进行配置。对应类文件在Illuminate\Foundation\Bootstrap目录下。
3.2中间件
在请求处理中,经过烦琐的准备工作,应用程序开始对请求进行处理,Laravel对请求的处理是逐级进行的,首先经过中间件处理,然后通过路由,最后控制器生成响应。
3.3路由处理生成响应
- 路由匹配
- 控制器生成
- 响应生成
4. 响应的发送与程序终止
4.1响应的发送
整个请求-响应过程最后的部分就是将封装在Illuminate\Http\Response
实例中的响应以Http响应的形式发送给客户端,实现一个请求生命周期最后的环节。响应的发送是通过index.php
中的$response->send();
实现的。
4.2程序终止
完成Http的响应后,进入程序生命周期的最后阶段——程序终止,在Laravel框架中,程序终止主要是完成终止中间件的调用。通过index.php
中的terminate()
方法实现。
二、数据库连接与管理篇
1.数据库管理阶段
首先介绍查询构造器实现过程中的数据库管理阶段。查询构造器建立的过程可分为2个阶段:数据库连接封装阶段、查询构造器生成阶段。其中第一阶段又可分为以下四个过程:
- 数据库管理阶段
- 数据库连接工厂阶段
- 数据库连接器阶段
- 数据库连接创建阶段