IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> laravel进阶学习之laravel生命周期 -> 正文阅读

[PHP知识库]laravel进阶学习之laravel生命周期

Laravel 生命周期概括起来大致可分为三步

1.加载依赖

2.创建 Laravel 应用实例

3.接收请求并响应

加载依赖及生成实例部分

????????一个请求进来之后由public/index.php开始也由public/index.php结束,直接打开该入口文件

????????laravel8的版本生成项目之后相比5.5版本会多出几行代码  maintenance.php,这里的功能是检查网站是否开启了维护模式,是laravel8新特性
可通过命令直接开启或关闭
????????php artison down 开启维护 
????????php artisan up  关闭维护  
????????页面输出模板可以在resource下的error/503.blade.php自由控制页面输出。

?????????往下大致分为了两个部分? ,加载项目依赖和创建应用实例部分,依赖即引进来的包,着重看app.php创建实例部分

????????此处主要是生成对应的容器并绑定路径,服务提供者,别名等到容器内,需要注意的是注册了并不代表启动,如下

????????往下可以看到内核绑定的部分

?????????以http内核为例定义了过滤请求的http中间件,以及配置,异常Facades 和服务提供者和引导程序等

????????小结:创建实例阶段做了创建 APP 容器、注册应用路径、注册基础服务提供者、配置中间件和引导程序等工作

?处理请求部分

?????????还是在入口文件处,自带的解析方法是通过make方法来实例化http内核

????????实例化内核所做的操作即上面所提到的? 注册各种中间件到容器内来过滤请求,后续即到处理请求本身的环节,handle ()处理请求,capture()创建请求的实例?

?handle的实例化在http内核内已有对应的操作内容,包括

sendRequestThroughRouter()

?

????????????????打开函数可以看到对该请求的具体操作,注册 $request到容器内,清除之前的 $request实例,启动引导程序并将请求发送到路由

? ? ? ? 看一下引导程序做了什么操作,

功能如上服务提供者的注释

????最后请求是交给Pipeline()的方法处理,即管道,定义是将对象传入多个类中执行任何类型的任务,并在所有任务执行完成后一次性返回最终结果

? ? ? ? 我们看下Pipeline的中间件底层实现,因跳跃比较多,只取最核心的部分,需要先了解array_reduce()? ?

解释里面就能看出来是依次递归调用闭包pipes,堆栈的操作为先进后出,故会调用array_reverse来进行翻转,确保排在前面的中间件能先被执行

之前的handle内有还有两个方法shouldSkipMiddleware() ,只是判定

????????dispatchToRouter()  

????????之前内核部分已经绑定的route服务在此处会调用dispatch来执行http请求

?这部分如果路由的实现是一个控制器,会完成控制器实例化并执行指定方法,如果是函数则会直接调用该函数,此处的功能也就是我们的逻辑处理核心部分,执行结束后会调用已绑定的prepareResponse生成响应并返回

??

??

?????????最后回到入口文件处结束会调用send方法来进行返回,即值客户端响应,打开laravel\vendor\symfony\http-foundation\Response.php? 的send方法

? ? ? 方法里面有个判定,fastcgi_finish_request方法是否存在来决定方法,但是fastcgi_finish_request

?

? 也就是说当php处于 fast_cgi模式运行时,响应发送给客户端后,该进程并不会马上结束,还会继续执行,所以后续会调用terminate中间件来结束生命周期

?

?

总结:?

? ? ? ? 1.在生成实例时会注册项目基础服务、服务提供者别名、目录路径等注册工作,还会绑定 HTTP 内核及 Console 内核到容器内, 同时在 HTTP 内核里配置中间件和引导程序。

? ? ? ? 2.接收请求时会依据运行环境从 容器 解析出 HTTP 内核或 Console 内核, 如果是HTTP 内核还会将把中间件及引导程序注册到容器

? ? ? ? 3.请求处理时会将http实例注册到容器内,以引导程序来配置环境变量,中间件,配置文件,异常处理等服务,依据路由来执行中间件过滤请求并且执行对应的控制器方法,最后返回响应结果,结束。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:14:44  更:2021-11-09 19:14:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:24:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码