Laravel框架源码解析

一、请求-响应篇


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个阶段:数据库连接封装阶段、查询构造器生成阶段。其中第一阶段又可分为以下四个过程:

  • 数据库管理阶段
  • 数据库连接工厂阶段
  • 数据库连接器阶段
  • 数据库连接创建阶段

猜你喜欢

转载自blog.csdn.net/MShuang6666/article/details/80500553