ThinkPHP 5 生命周期
前段时间用TP5开发了一个小程序,就熟悉了一下TP5。TP5是TP框架最新的一个版本,与以前的3还是有很大的区别,有人说和laravel比较靠近,其实也还好,每个人都有自己不同的看法,只要是选择一个自己用起来比较顺手的框架就好了。
我在学习一个框架的时候,最开始还是先看一下生命周期,真正了解生命周期之后,才能做到对整个框架整体的把握,在细节方面也能更好的理解。
1:入口文件:
TP5的入口文件在public文件下,是整个程序的入口,当然你也可以把文件移到根目录下,修改一下index.php文件里的应用目录和启动文件目录就好了。
在该文件中,功能很简单就是定义应用目录,然后加载引导文件
2:引导文件
下面我们顺着引导找到了start.php。发现里面引入了base.php,其实base文件也是一个引导文件,里面进行一些变量常量的加载,还有一些机制的注册,比如自动加载机制。
加载系统常量定义;
加载环境变量定义文件;
注册自动加载机制;
注册错误和异常处理机制;
加载惯例配置文件;
执行应用;
3.接着就到了应用类
应用类第一步进行了初始化操作,包括以下部分:
加载应用(公共)配置;
加载扩展配置文件(由extra_config_list定义);
加载应用状态配置;
加载别名定义;
加载行为定义;
加载公共(函数)文件;
注册应用命名空间;
加载扩展函数文件(由extra_file_list定义);
设置默认时区;
加载系统语言包;
4.URL检测
初始化完成后就会对URL进行检测,获取到请求地址信息。
请求URL必须为PATHINFO格式,否则则视为非法URL。
如果环境只支持普通格式则必须为以下格式:
http://serverName/index.php?s=/index/index/hello&val=value
5.路由检测
如果开启路由检测,则优先将URL与路由进行匹配,匹配成功则走路由调度,否则就走默认的分析识别。
开启配置为 url_route_on
6.请求分发
这一步是整个生命周期最重要的环节,也是我们接触最多的环节,URL会根据不同的调度找到的我们的控制器,运行控制器里面的方法,
经过一系列我们的代码处理后,得到结果。
7.响应输出
当我们的控制器处理完毕,return之后,就会有Response类将返回的结果输出到界面客户端,我们可以指定默认的格式,一般是json格式。
8.程序结束
其实当我们的Response类将结果输出的界面时,整个生命周期还并未结束。
到目前我们还没有说到日志,日志一般都是在生命周期完成的时候才会写入,所以,此时的框架任务就是把我们本次生命周期的信息写入日志。
至此,整个生命周期结束。
ThinkPHP 5 生命周期的更多相关文章
- thinkphp5.0 生命周期
1.入口文件 // 应用入口文件 index.php // 定义项目路径 define('APP_PATH', __DIR__ . '/../application/'); // 加载框架引导文件 r ...
- thinkphp5的生命周期
1.入口文件 虚拟主机目录/public/index.php 2.引入启动文件 虚拟主机目录/thinkphp/start.php 3.运行App下面的run方法 虚拟主机目录/thinkphp/li ...
- thinkphp5.0生命周期
本篇内容我们对ThinkPHP5.0的应用请求的生命周期做大致的介绍,以便于开发者了解整个执行流程. 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件. ...
- legend---六、php脚本变量的生命周期是怎样的
legend---六.php脚本变量的生命周期是怎样的 一.总结 一句话总结:应该是脚本结束变量的生命周期就完了 1.外部js找不到元素是怎么回事? 1 function myDailyTaskFin ...
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- C# MVC 5 - 生命周期(应用程序生命周期&请求生命周期)
本文是根据网上的文章总结的. 1.介绍 本文讨论ASP.Net MVC框架MVC的请求生命周期. MVC有两个生命周期,一为应用程序生命周期,二为请求生命周期. 2.应用程序生命周期 应用程序生命周期 ...
- UIViewController生命周期-完整版
一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load (NSObje ...
- angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation
今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:
随机推荐
- 力扣Leetcode 1518. 换酒问题
小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒.你购入了 numBottles 瓶酒. 如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的. 请你计算 最多 能喝到多少瓶酒. 示例: ...
- checkbox手动样式改变
.image_input_checkbox{ width:18px; height:18px; display: inline-block; vertical-align: middle; -webk ...
- Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- leetcode刷题-62不同路径2
题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 现在 ...
- .NET Core加解密实战系列之——对称加密算法
简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...
- 使用fiddler和安卓模拟器抓取安卓客户端数据包
安卓模拟器要选可以桥接网络的,本文中用的是雷电模拟器. 软件的安装都很简单,在此不再赘述. fiddler中的设置 首先,打开fiddler,点击Tools选项卡下的Options. 切换到https ...
- 吴恩达《深度学习》-第三门课 结构化机器学习项目(Structuring Machine Learning Projects)-第一周 机器学习(ML)策略(1)(ML strategy(1))-课程笔记
第一周 机器学习(ML)策略(1)(ML strategy(1)) 1.1 为什么是 ML 策略?(Why ML Strategy?) 希望在这门课程中,可以教给一些策略,一些分析机器学习问题的方法, ...
- [LeetCode]215. 数组中的第K个最大元素(堆)
题目 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...
- [Java核心技术]第九章-集合(Java集合框架、具体的集合、映射)
9.1Java集合框架 一些有的没的 可以使用接口类型存放集合的引用.一旦改变了想法,只需要在调用构造函数的地方做一处修改. add方法用于向集合添加元素,如果添加元素确实改变了集合就返回true. ...
- 大揭秘| 我司项目组Gitlab Flow && DevOps流程
长话短说,本文全景呈现我司项目组gitlab flow && devops Git Flow定义了一个项目发布的分支模型,为管理具有预定发布周期的大型项目提供了一个健壮的框架. Dev ...