php $app-run(),Thinkphp 5.x 应用启动 App::run()

在上文加载完配置等一系列工作之后,进入App::run(),在run()方法中,

首先通过自动加载机制拿到 Request 的一个实例

20200402184653227367.png

接着 $config = self::initCommon()初始化公共配置,先是 addNamespace 添加app当前所在的命名空间,然后 进行 self::init()初始化,跟进去

20200402184653782076.png

它会进行加载默认的application下的config.php配置文件、database.php数据库配置文件

还会读取额外的application\extra\ 下的配置文件、加载公共文件等等操作

20200402184653859227.png

最后又会调用 Config::get(),将其配置参数全部放入到数组中

20200402184654163927.png

然后回到 self::initCommon 函数中继续往下走,就是检查参数、加载额外需要的文件等等

20200402184654367059.png

回到 原来的run函数中继续往下走,先是进行 模块/控制器绑定操作,这里默认 BIND_MODULE 没定义 所以不走

20200402184654850476.png

然后往下走来到$dispatch = self::routeCheck($request, $config);,功能是URL 路由检测 跟进

20200402184655168848.png

进入了,先来到path方法,获取你的访问路径index/index/index

20200402184655232327.png

20200402184655412998.png

然后接着开始 路由的判断

20200402184655491126.png

默认runtime目录下没有路由的缓存文件,然后就就会去包含application目录下的route.php文件

20200402184655609295.png

接着进行路由的检测 进入到 check 方法中

20200402184655688399.png

在check方法中,先对你的路由路径index/index/index 中的 ‘/ ‘进行 ‘|‘ 替换处理

20200402184656203067.png

接着进入 $request->method 方法中 对该路由请求的方式为哪种类型,最后走的是如下

20200402184656268500.png

继续跟进它会获取服务器的$_SERVER的变量,然后调用input方法

20200402184656409130.png

看起来是获取 REQUEST_METHOD 中的值

20200402184656498001.png

然后又调用 getFilter 方法,来获取全局过滤的规则

20200402184656760706.png

20200402184657182597.png

上面获取完全局过滤的规则之后,就开始进行过滤操作

20200402184658037122.png

到这里 又回到了 check方法中,上面完成了 获取了 请求类型的路由规则 和 http的请求方式 和 请求的路径

然后接着开始进行 URL绑定,默认为空

20200402184658199238.png

这里接着把刚才 | 替换为 /

20200402184658469756.png

然后这里就走出了check方法,最后来到了 parseUrl 方法中, 该方法 实现的功能

先进入parseUrlPath这个方法,对 路由方法的分割,比如这里是Index/index/index,那么就如下返回

20200402184700010831.png

20200402184700468856.png

然后解析 模块 控制器 动作 以及 所带的参数

20200402184701233534.png

20200402184701646636.png

最后返回解析完的数据

20200402184701855628.png

到现在 已经是 回到了 app->run 的主方法中 routeCheck 的方法,所以 自己看来可以理解为就是对 路径的访问 路由方式的判断 解析 模块 控制器 动作 以及 所带的参数的操作!

到这里在App::run()方法中已经执行了一般了,主要的 initCommon routeCheck 两个方法都执行过了

现在继续执行的就是 exec 方法

到目前,前面得了 routeCheck 方法 会把结果放在 $dispatch中

20200402184701928873.png

然后进入 exec方法中,该方法会根据 $dispatch[‘type‘] 判断,这里是 module,那么走 module 的分支 module()方法

20200402184702256034.png

module() 该方法主要的操作就是 初始化模块

20200402184702581242.png

来到其中的 init 方法 ,流程就是 先根据模块 定位模块的目录 然后加载 当前模块目录下的 config.php文件

20200402184702817579.png

然后加载 当前模块目录下的 config.php文件

20200402184703115442.png

接着读取数据库配置文件等等

20200402184703300996.png

然后出$request->module方法 重新来到 exec 中module方法 中,接着获取控制器名

20200402184703517801.png

再获取操作名

20200402184703900629.png

再整合 控制器和动作

20200402184704028563.png

接着再次获取动作名

20200402184704236579.png

最后开始调用

20200402184704460220.png

20200402184704545185.png

真正调用Action的函数

20200402184704636008.png

最后在exec中返回调用返回来的数据$data

20200402184704918246.png

通过该Response创建,然后最后echo

20200402184705164349.png

20200402184705347950.png

到这里完整的一次http请求就结束了!

原文:https://www.cnblogs.com/zpchcbd/p/12563157.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php react-native,React-Native+Mobx实现商城APP

这次给大家带来React-NativeMobx实现商城APP,React-NativeMobx实现商城APP的注意事项有哪些,下面就是实战案例,一起来看一下。最近一直在学习微信小程序,在学习过程中,看到了 wxapp-mall这个微信小程序的项目&#xff…

mysql 流程控制语句,mysql PL(procedure language)流程控制语句

在MySQL中,常见的过程式SQL语句可以用在存储体中。其中包括IF语句、CASE语句、LOOP语句、WHILE语句、ITERATE语句和LEAVE语句,它们可以进行流程控制。IF语句相当于Java中的if()...else if()...else...CASE语句相当于Java中的switch()...case A:...break;…

mysql 空闲几分钟速度变慢,MYSQL 运作一小段时间后,速度变得奇慢。而CPU基本空闲状态...

当前位置:我的异常网 MySQL MYSQL 运作一小段时间后,速度变得奇慢。而CPU基本MYSQL 运作一小段时间后,速度变得奇慢。而CPU基本空闲状态www.myexceptions.net 网友分享于:2015-08-26 浏览:11次MYSQL 运行一小段时间后&#xff…

matlab axis 用法,MATLAB中regionprops的用法

Matlab图像处理函数:regionprops这里给出在Matlab图像处理工具箱中非常重要的一个图像分析函数:regionprops。顾名思义:它的用途是get the properties of region,即用来度量图像区域属性的函数。语法STATS regionprops(L,propert…

emqx配置mysql认证,emqx使用mysql完成用户密码验证和ACL鉴权

emqx使用mysql完成用户密码验证和ACL鉴权emqx使用mysql完成用户密码验证和ACL鉴权摘要:前几篇博客介绍的是使用配置文件配置了ACL和客户端用户名密码配置实现生产环境下的安全登录和权限控制,各项配置比较繁琐,修改起来比较麻烦,下…

MATLAB课程表分配问题,求助matlab大神,学校的课程安排太骚了,我们压根就不用学matlab...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼上了MATLAB,可是对数学完全不感兴趣。老师弄了个作业,代码附件了。求大佬帮忙理解原理后简单做一个不一样的过程的程序。帮忙注释一下代码。(一开始忘记下载要币了。不好意思)两个.m文件,需要放一…

php时间转分钟前,PHP把时间转换成几分钟前几小时前几天前

现在很多网站将时间的显示都变得比较人性化,今天项目有一个也需要在对应的资讯后面显示为几分钟前、几小时前,接下来吾爱编程为大家分享一下PHP把时间转换成几分钟前、几小时前几天前的方法,有需要的小伙伴可以参考一下:1、项目需…

emlog_toolkit.php,emlog 4.0版本IIS6下伪静态划定规矩

emlog默许不能生成静态文件,不过彷佛有生成静态页面的相干插件,该插件博客吧先不研讨,本日博客簿要引见的是emlog 4.0版本在IIS6环境下的伪静态划定规矩,人人都晓得,经由过程伪静态能够让博客文章网址变得对搜索引擎越…

php如何封装数组,PHP数组转对象 对象转数组封装类

代码如下/*** 数组 转 对象** param array $arr 数组* return object*/function array_to_object($arr) {if (gettype($arr) ! array) {return;}foreach ($arr as $k > $v) {if (gettype($v) array || getType($v) object) {$arr[$k] (object)array_to_object($v);}}retu…

api.php phpcms,phpcms程序api怎么写接口

易站通,带你玩转PHPCMS建站程序,让你更快的熟悉该程序下面让我们来学习吧phpcms api怎么写接口?最近自己开发了一套crm系统,想着如果将来能卖出去,能不能再界面动态调用自己网站的推荐信息,算是一种广告吧&…

oracle修改窗口字体大小,jQuery之字体大小的设置方法

先获取字体大小,进行处理。再将修改的值保存。slice() 方法可从已有的数组中返回选定的元素。arrayObject.slice(start,end)。start 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素&…

oracle 删除表 索引也会删除吗,Oracle 删除当前用户下所有的表、索引、序列

通过下面语句可以得到要删除Oracle的所有表、索引、序列... 的语句select drop table || table_name ||;||chr(13)||chr(10) from user_tables; --delete tablesselect drop view || view_name||;||chr(13)||chr(10) from user_views; --delete viewsselect drop sequence …

基于Java、Kafka、ElasticSearch的搜索框架的设计与实现

Jkes是一个基于Java、Kafka、ElasticSearch的搜索框架。Jkes提供了注解驱动的JPA风格的对象/文档映射,使用rest api用于文档搜索。项目主页:https://github.com/chaokunyang/jkes安装可以参考jkes-integration-test项目快速掌握jkes框架的使用方法。jkes…

Docker是传统的应用发布管理的终结者么?

译者注:使用Docker能真正改善传统的应用发布管理中遇到的问题么?以下是译文:自从2013年发布以来,Docker已经成为每一个操作管理者眼中的最爱。如果你一直与世隔绝,这里恰恰是你错过的部分。Docker是在一个操作环境地址…

基于Mesos/Docker构建数据处理平台

本文深入介绍了去哪儿网利用Mesos和Docker构建私有云服务的全过程,分享了从无状态应用向有状态应用逐步过度的经验与心得。平台概览2014年下半年左右,去哪儿完成了有关构建私有云服务的技术调研,并最终拍定了Docker/Mesos这一方案。下图1展示…

Mesos容器引擎的架构设计和实现解析

引言:提到容器,大家第一时间都会想到Docker,毕竟Docker是目前最为流行的容器开源项目,它实现了一个容器引擎(Docker engine),并且为容器的创建和管理、容器镜像的生成、分发和下载提供一套非常便…

阿里的盔甲、未来20年发展的动力以及对未来的洞察

刚刚变身迈克尔杰克逊,用“经济体”、“理想主义”等词刷屏的马云又在教师节那天,赶到2017世界物联网博览会,为阿里的物联网站台。过去18年以来,淘宝网、天猫、聚划算、全球速卖通、阿里巴巴国际交易市场、1688、阿里妈妈、蚂蚁金…

MySQL InnoDB Memcached Plugin在Oray公司的实践

1、应用背景介绍我所在职的Oray是一家提供各种互联网服务且具有海量用户的企业,我们也一直在实践各种新技术新架构;缓存方面,我们从memcached、ttserver、redis等都有较多应用,其中redis在我们的dns体系中有着很深度的集成使用&am…

联想超融合平台oracle,联想AIO超融合云一体机解决方案.pdf

联想超融合云一体机解决方案--THINKCLOUD AIO联想云服务集团资深产品经理 赵舜尧2015年6月 zhaosy42015 LENOVO RESTRICTED. All rights reserved.1产品篇2客户收益篇 联想 技术篇THINKCLOUD AIO4测试篇32015 LENOVO RESTRICTED. ALL RIGHTS RESERVED.联想超融合云一体机解决方…

网易数据运河系统NDC设计与应用

【导语】 NDC是网易近一年新诞生的结构化数据传输服务,它整合了网易过去在数据传输领域的各种工具和经验,将单机数据库、分布式数据库、OLAP系统以及下游应用通过数据链路串在一起。除了保障高效的数据传输外,NDC的设计遵循了单元化和平台化的…