Laravel最早接触是刚开始实习的时候,那时通过网上的学习资料很快便上手,开发模块接口。后来没有什么深入和总结,但是当我刚开始学Laravel的时候,我对Laravel最大的认识就是,框架除了路由、中间件和 MVC
设计以外,基本所有的功能都是以模块服务的方式提供,而且在学习Laravel的会让自己有学习设计模式的意识,感觉很受启发。下面是对Laravel 5.x 启动过程以及 Http
请求处理过程的源码简要分析。
入口文件
Laravel和大多数框架一样采用同样的单一入口方式,Laravel的入口文件位于public/index.php
,所有的请求都通过你的网页服务器(Apache
/ Nginx
)的设置导向这个文件。index.php 这个文件并没有太多的代码。更确切地说,它只是个起始点,用来加载框架的其它部分。
index.php
此文件会加载由 Composer
生成的自动加载器定义,并获取由 bootstrap/app.php
文件中所生成的 Laravel
应用程序实例。Laravel
自身的第一个动作就是创建一个应用程序/服务容器的实例。
HTTP/终端核心
接下来,进入应用程序的请求的会被送往 HTTP
核心或终端核心,视该请求的种类而定。这两种核心是所有请求流向的中心位置。现在开始,我们只将焦点放在 HTTP
核心,它位于 app/Http/Kernel.php
。
HTTP
核心扩展了 Illuminate\Foundation\Http\Kernel
类,它定义了一个 bootstrappers
数组,在请求被运行前会先行运作。这些启动器设置了错误处理、日志记录、侦测应用程序环境,并运行其它需要在请求实际处理前就该被完成掉的工作。
HTTP
核心也定义了一份 HTTP
中间件清单,所有的请求在被应用程序处理之前都必须经过它们。这些中间件处理 HTTP
session
的读写、验证 CSRF
令牌、决定应用程序是否处于维护模式,以及其它更多任务作。
HTTP
核心 handle
方法的方法签章相当简单:接收一个 Request
并返回一个 Response
。把核心想像成一个大的黑盒子,代表你完整的应用程序。喂给它 HTTP
请求,它就会传回 HTTP
响应。
服务提供者
最重要的核心启动加载行为之一,是加载你的应用程序的服务提供者。应用程序的所有服务提供者,都在 config/app.php
此配置文件的 providers
数组中被设置。首先,所有提供者的 register
方法会被调用,一旦所有提供者都被注册之后,boot
方法就会被调用。
服务提供者负责在启动时加载框架的所有组件,例如数据库、队列、验证、以及路由组件。服务提供者启动加载并设置框架提供的各种功能,是整个 Laravel
启动加载过程中最重要的面向。
服务提供者是启动 Laravel
应用程序的真正关键。应用程序的实例被创建、服务提供者被注册、请求被移转至已启动的应用程序。真正掌握 Laravel
应用程序是如何创建并通过服务提供者启动,将是很有价值的。当然,应用程序默认的服务提供者存放在 app/Providers
此一目录下。
源码分析过程
上面部分是结合文档的理论部分,可能会比较难理解,下面通过源码的方式分析一下整个过程。因为在word文档上整理的分析过程,而且显示的效果会比较好,所以整个分析过程就用截图的方式记录。
以上包括Laravel 5.x 启动过程以及 Http
请求处理过程的基本处理流程,大家可以对照框架的源码一步一步学习,希望能够帮助大家。