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

Laravel 5.x 请求的生命周期(附源码)的更多相关文章

  1. drf复习(一)--原生djangoCBV请求生命周期源码分析、drf自定义配置文件、drf请求生命周期dispatch源码分析

    admin后台注册model  一.原生djangoCBV请求生命周期源码分析 原生view的源码路径(django/views/generic/base.py) 1.从urls.py中as_view ...

  2. 关于Application的onCreate以及Activity生命周期在源码里都是什么时候调用的

    在ActivityThread.handleLaunchActivity中 Activity a = performLaunchActivity(r, customIntent);这一方法最终回调目标 ...

  3. Minor【 PHP框架】2.第一个应用与请求的生命周期

    框架Github地址:github.com/Orlion/Minor (如果觉得还不错给个star哦(^-^)V) 框架作者: Orlion 知乎:https://www.zhihu.com/peop ...

  4. Mvc请求的生命周期

    ASP.NET Core : Mvc请求的生命周期 translation from http://www.techbloginterview.com/asp-net-core-the-mvc-req ...

  5. [oldboy-django][2深入django]django一个请求的生命周期 + WSGI + 中间件

    1 WSGI # WSGI(是一套协议,很多东西比如wsgiref, uwsgiref遵循这一套协议) - django系统本质 别人的socket(wsgiref或者uwsgiref) + djan ...

  6. Djngo 请求的生命周期

    1.Django请求的生命周期 路由系统 -> 试图函数(获取模板+数据=>渲染) -> 字符串返回给用户 2.路由系统 /index/ -> 函数或类.as_view() / ...

  7. 05.Django-form表单与请求的生命周期

    Django中请求的生命周期 HTTP请求及服务端响应中传输的所有数据都是字符串 步骤 用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务器 url经过wsgi和中间件,到达路由映射表,在 ...

  8. Envoy 代理中的请求的生命周期

    Envoy 代理中的请求的生命周期 翻译自Envoy官方文档. 目录 Envoy 代理中的请求的生命周期 术语 网络拓扑 配置 高层架构 请求流 总览 1.Listener TCP连接的接收 2.监听 ...

  9. JDK HttpClient 单次请求的生命周期

    HttpClient 单次请求的生命周期 目录 HttpClient 单次请求的生命周期 1. 简述 2. uml图 3. Http连接的建立.复用和降级 3.1 调用流程及连接的建立和复用 3.2 ...

随机推荐

  1. .NET跨平台之旅:将示例站点升级至 ASP.NET Core 1.1

    微软今天在 Connect(); // 2016 上发布了 .NET Core 1.1 ,ASP.NET Core 1.1 以及 Entity Framework Core 1.1.紧跟这次发布,我们 ...

  2. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  3. Android业务组件化之URL Scheme使用

    前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...

  4. Java多态性——分派

    一.基本概念 Java是一门面向对象的程序设计语言,因为Java具备面向对象的三个基本特征:封装.继承和多态.这三个特征并不是各自独立的,从一定角度上看,封装和继承几乎都是为多态而准备的.多态性主要体 ...

  5. Log4net - 规则简介

    参考页面: http://www.yuanjiaocheng.net/CSharp/csharprumenshili.html http://www.yuanjiaocheng.net/entity/ ...

  6. Boost信号/槽signals2

    信号槽是Qt框架中一个重要的部分,主要用来解耦一组互相协作的类,使用起来非常方便.项目中有同事引入了第三方的信号槽机制,其实Boost本身就有信号/槽,而且Boost的模块相对来说更稳定. signa ...

  7. 统计iOS项目的总代码行数的方法

    打开终端, 用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or - ...

  8. RMS去除在线认证

    在微软 OS 平台创建打开 RMS 文档如何避免时延 相信我们在企业内部的环境中已经部署了微软最新的OS平台,Windows 7和Windows 2008 R2,在这些OS平台上使用IRM功能时,您有 ...

  9. Android系统默认对话框添加图片

    开发工具Android Studio 今天公司UI要求软件对话框改成加图片的,以前没有做过,所以就学习了一下,废话不多说, 看效果: 创建XML文件dialog_lsit_item.xml <L ...

  10. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...