laravel框架在php中应该算是知名度非常高的,用了半年了,之前也只是在遇到问题时才去看对应的源码,没有好好理清各部分的实现关系,终究是半知半懂,因此决定花点时间从整体的角度研究一下这个框架。后面几篇文章我们将从源码角度窥探一下它的技术内幕,看一看我们平时使用的各种特性是如何实现的。
这里我们先简单介绍下框架的生命周期。
当请求被服务器转发给laravel是,首先是进入入口文件 /public/index.php
。然后做以下几件事
1. 载入自动加载文件 /bootstrap/autoload.php
2. 载入 /bootstrap/app.php
生成框架实例 app
3. 运行实例,生成内核对象kernel
4. 内核对象处理请求 handle(request)
,并返回处理结果 response
5. 将响应发送给客户端 response->send
6. 终止内核
上面的过程简单说来如下:进入入口文件,先载入Composer生成的自动加载配置,实现类和函数的自动加载机制。然后从 /bootstrap/app.php
获取Laravel应用实例,即创建服务器容器实例。接下来,生成http或Console内核,这个由请求的类型决定。请求将被发送到这个内核进行处理。内核将会执行 bootstrappers
数组定义的类,这个数组类包含 错误处理、日志、检测应用环境以及其他在请求被处理前需要处理的任务类 。在执行一系列内部中间件,预处理完成后,请求被内核的handle方法处理,该方法接受一个请求,返回一个响应。应用启动并且所有服务提供者被注册,请求将被交给路由器进行分发,即route.php
文件,如果路由定义了中间件,则中间件将被执行,然后调用对应的控制器对请求进行处理。处理完成后laravel封装响应然后返回给客户端,接着框架应用被终止。请求结束
整个生命周期如上,后面几篇文章中,我们会从上面所述的几个角度从源码角度逐一看一看在这个过程中框架究竟做了什么