| |
|
开发:
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 生命周期概括起来大致可分为三步加载依赖及生成实例部分????????一个请求进来之后由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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |