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. JS里面Data日期格式转换

    var format = function(time, format){     var t = new Date(time);     var tf = function(i){return (i  ...

  2. Node.js:dgram模块实现UDP通信

    1.什么是UDP? 这里简单介绍下,UDP,即用户数据报协议,一种面向无连接的传输层协议,提供不可靠的消息传送服务.UDP协议使用端口号为不同的应用保留其各自的数据传输通道,这一点非常重要.与TCP相 ...

  3. angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用

    今天我们要讲的是ng2的路由系统. 例子

  4. MAC Osx PHP安装指导

    php.ini的位置 Mac OS X中没有默认的php.ini文件,但是有对应的模版文件php.ini.default,位于/private/etc/php.ini.default 或者说 /etc ...

  5. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  6. VICA 架构设计(1)

    本文记录最近完成的一个通用实时通信客户端的架构.   背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...

  7. github免输用户名/密码SSH登录的配置

    从github上获取的,自己整理了下,以备后用. Generating an SSH key mac windows SSH keys are a way to identify trusted co ...

  8. [原创]Macbook Pro Retina 15吋安装Windows 7和Windows 8.1方法

    前言 本以为有Bootcamp神器在手,Macbook装Win系统应该是不在话下,没想到着实折腾了一番.期间因为误操作导致OSX也挂掉进不去只得磁盘全部抹掉网络恢复安装.为了让大家少走弯路,提供个人安 ...

  9. JavaScript

    2015-08-01 16:20 JavaScript使用时需要注意的地方 1.引入JS的位置:最好的做法是把<script>的标签放到HTML文档的最后.</body>标签之 ...

  10. 【AI开发第一步】微软认知服务API应用

    目录 介绍 API分类 使用‘视觉’API完成的Demo 点击直接看干货 介绍 从3月份Google家的阿尔法狗打败韩国围棋冠军选手李世石,到之后微软Build2016大会宣布的“智能机器人”战略.种 ...