欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

图解Laravel请求的完整生命周期

时间:2022-11-03 07:02:11 | 浏览:6201

来源 | CSDN博客精选头图 | 视觉中国世间万物皆有生命周期,当我们使用任何工具时都需要理解它的工作原理,那么用起来就会得心应手,应用开发也是如此。理解了它的原理,那么使用起来就会游刃有余。Laravel是一套简洁的PHP Web开发框

来源 | CSDN博客精选

头图 | 视觉中国

世间万物皆有生命周期,当我们使用任何工具时都需要理解它的工作原理,那么用起来就会得心应手,应用开发也是如此。理解了它的原理,那么使用起来就会游刃有余。

Laravel是一套简洁的PHP Web开发框架(PHP Web Framework),今天,我们就来了解 一下Laravel 的生命周期。在此之前,我们先回顾一下PHP 的生命周期。

PHP 的生命周期

生命周期

当我们请求一个php文件时,PHP 为了完成这次请求,会发生5个阶段的生命周期切换:

  1. 模块初始化(MINIT),即调用 php.ini 中指明的扩展的初始化函数进行初始化工作,如 mysql 扩展。

  2. 请求初始化(RINIT),即初始化为执行本次脚本所需要的变量名称和变量值内容的符号表,如 $_SESSION变量。

  3. 执行该PHP脚本。

  4. 请求处理完成(Request Shutdown),按顺序调用各个模块的 RSHUTDOWN 方法,对每个变量调用 unset函数,如 unset $_SESSION 变量。

  5. 关闭模块(Module Shutdown) , PHP调用每个扩展的 MSHUTDOWN 方法,这是各个模块最后一次释放内存的机会。这意味着没有下一个请求了。

PHP 的运行模式

PHP两种运行模式是WEB模式、CLI模式。

  1. 当我们在终端敲入php这个命令的时候,使用的是CLI模式。

  2. 当使用Nginx或者别web服务器作为宿主处理一个到来的请求时,使用的是WEB模式。

WEB模式和CLI(命令行)模式很相似,区别是:

  1. WEB模式为了应对并发,可能采用多线程,因此生命周期1和5有可能只执行一次,下次请求到来时重复2-4的生命周期,这样就节省了系统模块初始化所带来的开销。

  2. CLI 模式会在每次脚本执行经历完整的5个周期,因为你脚本执行完不会有下一个请求。

可以看出PHP生命周期是很对称的。说了这么多,就是为了定位Laravel运行在哪里,没错,Laravel仅仅运行再 第三个阶段:

理解这些,你就可以优化你的 Laravel 代码,可以更加深入的了解 Laravel 的singleton(单例)。至少你知道了,每一次请求结束,PHP 的变量都会 unset,Laravel 的 singleton 只是在某一次请求过程中的singleton;你在 Laravel 中的静态变量也不能在多个请求之间共享,因为每一次请求结束都会 unset。理解这些概念,是写高质量代码的第一步,也是最关键的一步。因此记住,PHP是一种脚本语言,所有的变量只会在这一次请求中生效,下次请求之时已被重置,而不像Java静态变量拥有全局作用。

Laravel 的生命周期

Laravel 的生命周期从publicindex.php开始,从publicindex.php结束。

下面是 publicindex.php的全部源码,更具体来说可以分为四步:

// 1require __DIR__."/../bootstrap/autoload.php";// 2$app = require_once __DIR__."/../bootstrap/app.php";$kernel = $app->make(IlluminateContractsHttpKernel::class);// 3$response = $kernel->handle( $request = IlluminateHttpRequest::capture);$response->send;// 4$kernel->terminate($request, $response);


以下是四步详细的解释是:

composer自动加载需要的类

  1. 文件载入composer生成的自动加载设置,包括所有你 composer require的依赖。

  2. 生成容器Container,Application实例,并向容器注册核心组件(HttpKernel,ConsoleKernel ,ExceptionHandler)(对应代码2,容器很重要,后面详细讲解)。

  3. 处理请求,生成并发送响应(对应代码3,毫不夸张的说,你99%的代码都运行在这个小小的handle 方法里面)。

  4. 请求结束,进行回调(对应代码4,还记得可终止中间件吗?没错,就是在这里回调的)。

Laravel 的请求步骤,我们不妨在详细一点:

第一步:注册加载composer自动生成的class loader

就是加载初始化第三方依赖。

第二步:生成容器 Container

并向容器注册核心组件,是从 bootstrap/app.php 脚本获取 Laravel 应用实例。

这一步是重点,处理请求,并生成发送响应。

请求被发送到 HTTP 内核或 Console 内核,这取决于进入应用的请求类型。

取决于是通过浏览器请求还是通过控制台请求。这里我们主要是通过浏览器请求。

HTTP 内核继承自 IlluminateFoundationHttpKernel 类,该类定义了一个 bootstrappers 数组,这个数组中的类在请求被执行前运行,这些 bootstrappers 配置了错误处理、日志、检测应用环境以及其它在请求被处理前需要执行的任务。

protected $bootstrappers = [ //注册系统环境配置 (.env) "IlluminateFoundationBootstrapDetectEnvironment", //注册系统配置(config) "IlluminateFoundationBootstrapLoadConfiguration", //注册日志配置 "IlluminateFoundationBootstrapConfigureLogging", //注册异常处理 "IlluminateFoundationBootstrapHandleExceptions", //注册服务容器的门面,Facade 是个提供从容器访问对象的类。 "IlluminateFoundationBootstrapRegisterFacades", //注册服务提供者 "IlluminateFoundationBootstrapRegisterProviders", //注册服务提供者 `boot` "IlluminateFoundationBootstrapBootProviders",];

注意顺序:Facades 先于ServiceProviders,Facades也是重点,后面说,这里简单提一下,注册 Facades就是注册 configapp.php中的aliases

数组,你使用的很多类,如Auth,Cache,DB等等都是Facades;而ServiceProviders的register方法永远先于boot方法执行,以免产生boot方法依赖某个实例而该实例还未注册的现象。

HTTP 内核还定义了一系列所有请求在处理前需要经过的 HTTP 中间件,这些中间件处理 HTTP 会话的读写、判断应用是否处于维护模式、验证 CSRF 令牌等等。

HTTP 内核的标志性方法 handle处理的逻辑相当简单:获取一个 Request,返回一个Response,把该内核想象作一个代表整个应用的大黑盒子,输入 HTTP 请求,返回 HTTP 响应。

第四步:将请求传递给路由

在Laravel基础的服务启动之后,就要把请求传递给路由了。路由器将会分发请求到路由或控制器,同时运行所有路由指定的中间件。

传递给路由是通过 Pipeline(管道)来传递的,但是Pipeline有一堵墙,在传递给路由之前所有请求都要经过,这堵墙定义在appHttpKernel.php中的$middleware数组中,没错就是中间件,默认只有一个CheckForMaintenanceMode中间件,用来检测你的网站是否暂时关闭。这是一个全局中间件,所有请求都要经过,你也可以添加自己的全局中间件。

然后遍历所有注册的路由,找到最先符合的第一个路由,经过它的路由中间件,进入到控制器或者闭包函数,执行你的具体逻辑代码。

所以,当请求到达你写的代码之前,Laravel已经做了大量工作,请求也经过了千难万险,那些不符合或者恶意的的请求已被Laravel隔离在外。

相关资讯

「php框架实例」|Laravel之ModelObserver模型

本文主要学习下Laravel的Model Observer模型观察者,小编把自己的一点点经验分享出来希望对别人能有帮助。同时,作者会将开发过程中的一些截图和代码黏上去,提高阅读效率。开发环境:Laravel5.1+MAMP+PHP7+MyS

图解Laravel请求的完整生命周期

来源 | CSDN博客精选头图 | 视觉中国世间万物皆有生命周期,当我们使用任何工具时都需要理解它的工作原理,那么用起来就会得心应手,应用开发也是如此。理解了它的原理,那么使用起来就会游刃有余。Laravel是一套简洁的PHP Web开发框

GaliaLahav2022"Telenovela"秋冬婚纱系列眼花缭乱的浪漫嫁衣

欣赏Galia Lahav最新的 2022 年秋季高级定制新娘系列“Telenovela”中令人眼花缭乱的浪漫婚纱的惊艳第一眼。收藏笔记如下:设计师 Galia Lahav 和 Sharon Sever 永远相信为场合着装,他们创造了他们最

英国艺术留学:ALevelArt&Design优秀作品集全解析

著名英国导演艾伦·帕克(Alan Parker)曾说过“ 艺术在学校中不该只作为副科,我认为它应当作为主科。因为艺术在教导人们如何应对身边的一切。它就像是供给其他学科呼吸的氧气。”西方国家的艺术教育更注重应用性,让学生意识到创作并不是简单的

Avellano|乳胶新编

身穿红色乳胶大衣的男人阔步走上天台,高举手枪,朝着浓黑如墨的夜幕,发出了一枚幽绿色的信号弹。这是Avellano 2022春夏系列短片的开头场景。信号弹划破夜空,而后,向着城市坠落,身穿乳胶服装的人们心照不宣地往一处聚集,锦衣夜行。这一切充

进军山地领域Cervélo发布ZHT-5山地车

Cervélo发布ZHT-5山地车正式进军山地市场,车架围绕100毫米行程前叉和29寸轮径设计,这是一款以低重量高效率为主的山地自行车。Cervélo表示,ZHT-5专为XC赛道打造,将在明年5月份荷兰瓦尔肯堡举行的XCO世界杯上首次亮相。

找寻Gravel新乐趣,GIANT发布全新Revolt,你会买吗?

2020自行车市场经过一片热火朝天之后,GRAVEL BIKE也逐渐开始以代替山马的姿态走进国内消费者视野,捷安特&LIV作为首当其冲的龙头品牌也适时拿出看家GRAVEL BIKE主力车系-GIANT Revolt &LIV DEVOTE,

减少Gravel探险阻力!外媒评测美利达eSILEX电助力全地形公路车

出处 : granfondo-cycling 作者 : Philipp SchwabeSILEX + 600是美利达进军电助力全地形公路车市场的第一款产品,该车型使用了与美利达电助力公路车、城市助力车相同的车架平台,并采用后轮花鼓电机作为推

Laravel作为PHP框架,它的优点和功能是什么?

Laravel是当今最熟练,流行和广泛使用的开源框架之一。Laravel具有多种功能,例如模板引擎,MVC架构支持,安全性高,开发者工具,数据库迁移等。这些Laravel高级功能使它比其他PHP框架更好。 它为高端Web应用程序开发提供了基

PHP_Laravel框架版本

【Laravel版本-官方】历史:Laravel 1 Laravel在2011年6月9日发布了第一个 Beta测试版本,并在一个月后发布正式版本 Laravel 1。Laravel 1 默认提供了身份验证、多语系、 Model(MVC)、v

thinkphp框架和lavavel框架哪种比较好用?

国内有两款开源的php框架比较火,一款是国产神器的thinkphp,一款是常年在榜单第一的位置的lavavel,对于新手还是老手有个疑问,我做项目来说选用哪一款来做对我的项目是帮助最大的呢?今天带你们来全面对比下这两款框架。一:框架介绍:

最受欢迎PHP框架Laravel5.5新特性提前体验

laravel 5.5Laravel 5.5 再过几天就要发布了,这将是 Laravel 框架的下一个 LTS release(长期支持版),自 5.1 以后,经历两年多迭代演进终于迎来新一代 LTS 版 Laravel 5.5 。Lara

六星教育:为什么PHP架构师都喜欢Laravel框架?如何能熟练运用?

PHP框架作用PHP工程师在进行项目开发时,为了创建更稳定的程序,减少重复编写代码的动作,这时就会应用到PHP框架。使用PHP框架,就可以在二次开发中简化开发过程,快速实现系统功能。简单来说,PHP框架的作用就是促进Web系统的快速开发、节

分享配置PHP框架Laravel最新版遇到的几个坑

最近因为项目需要,所以需要搭建基于LV的开发环境,之前因为使用的是YII框架,所以第一次搭建这个框架,于是配置这个框架遇到了一些坑,特此分享给大家。composer.phar文件还是像以往那样,首先打开LV的官方文档的安装配置环境部分,看看

Php框架应用之laravel框架

Laravel框架是整个 PHP 程序员都为之疯狂的框架,基于 symfony框架写的,laravel有很多高级的思想,真正面向对象,学习它的过程中能够了解框架的运行机制。首先说其缺点,速度慢,但是这并不是一个大问题:1.绝大多数项目的性能

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈直播平台大全网六间房直播资讯网安宥真歌迷网张国荣歌迷网潘玮柏歌迷网宝宝起名字林志颖歌迷网首尔旅游网南宁旅游网东鹏瓷砖资讯网美利达自行车金毛寻回犬资讯网山竹水果网今日临汾莫干山旅游攻略
安顺头条新闻网-安顺西秀区新闻头条、今日安顺最新消息、安顺疫情最新消息今天、安顺人才网招聘信息网、安顺旅游十大景点排名、安顺人才市场招聘网最新招聘、安顺天气预报、安顺经开区顺天园房价、安顺周边免费景区、贵州安顺今日头条。
安顺头条新闻网 66337.cn ©2022-2028版权所有