Laravel 5.x 请求的生命周期(附源码)

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 请求处理过程的基本处理流程,大家可以对照框架的源码一步一步学习,希望能够帮助大家。

转载请注明出处。
作者:wuxiwei
出处:http://www.cnblogs.com/wxw16/p/6218742.html

posted @ 2016-12-24 23:25  wuxiwei  阅读(...)  评论(...编辑  收藏