这一系列文章旨在对Laravel框架进行深入的解析,了解和揭示框架本身的内在实现机制,以便更好地指导我们对框架的使用。
入口文件
基于Laravel框架开发的应用,对Web Server来说,和普通应用并无区别。所以当Web Server收到一个Http请求,不管是Apache还是Nginx,都只是简单地将其交给DocumentRoot下面特定的入口文件index.php,并等待其返回相应的结果。对Laravel而言,这个入口就是工程目录中的public/index.php文件。所有Http请求过来后,都是由这个文件进行处理的。在某种意义上,甚至可以说,都是在这个文件之内进行处理的。
index.php当中的代码,虽然很概括,但完整地描述了Laravel框架对一个Http请求进行处理的流程。框架中所有其他的处理过程,都被隐藏在这个概括的流程当中,等待我们去一一探索和发现。这个大概的流程,是这样的:
- 定义了一个常量:LARAVEL_START,记录脚本被启动时服务器的时间,精确到毫秒。
- 执行vendor/autoload.php当中的代码。这个实际上是composer的提供的一项功能,用来自动加载被composer下载的库中的所有类文件,等我们对composer进行研究之后再来具体探讨。
- 通过执行bootstrap/app.php当中的代码,来创建一个Laravel应用(app)实例,这个实例可以认为是一个容器,里面装载了所有为了完成一次对request进行处理并返回response所需要的各种组件。因为Web Server每收到一个http请求,都会调用一次public/index.php,所以,对每一个http请求,都是由一个全新创建的app实例来处理的。反过来,每个app实例,也都只处理一个请求。
- 创建一个kernel对象。
- 让kernel去处理http请求(也就是request对象),并将处理结果封装成一个response对象。
- 发送response对象。
- 结束对这次“request->response“的处理。
就是这七个步骤。