thinkphp 系统流程
用户URL请求调用应用入口文件(通常是网站的index.php)载入框架入口文件(ThinkPHP.php)记录初始运行时间和内存开销系统常量判断及定义载入框架引导类(Think\Think)并执行Think::start方法进行应用初始化设置错误处理机制和自动加载机制调用Think\Storage类进行存储初始化(由STORAGE_TYPE常量定义存储类型)部署模式下如果存在应用编译缓存文件则直接加载(直接跳转到步骤22)读取应用模式(由APP_MODE常量定义)的定义文件(以下以普通模式为例说明)加载当前应用模式定义的核心文件(普通模式是 ThinkPHP/Mode/common.php)加载惯例配置文件(普通模式是 ThinkPHP/Conf/convention.php)加载应用配置文件(普通模式是 Application/Common/Conf/config.php)加载系统别名定义判断并读取应用别名定义文件(普通模式是 Application/Common/Conf/alias.php)加载系统行为定义判断并读取应用行为定义文件(普通模式是 Application/Common/Conf/tags.php)加载框架底层语言包(普通模式是 ThinkPHP/Lang/zh-cn.php)如果是部署模式则生成应用编译缓存文件加载调试模式系统配置文件(ThinkPHP/Conf/debug.php)判断并读取应用的调试配置文件(默认是 Application/Common/Conf/debug.php)判断应用状态并读取状态配置文件(如果APP_STATUS常量定义不为空的话)检测应用目录结构并自动生成(如果CHECK_APP_DIR配置开启并且RUNTIME_PATH目录不存在的情况下)调用Think\App类的run方法启动应用应用初始化(app_init)标签位侦听并执行绑定行为判断并加载动态配置和函数文件调用Think\Dispatcher::dispatch方法进行URL请求调度自动识别兼容URL模式和命令行模式下面的$_SERVER['PATH_INFO']参数检测域名部署以及完成模块和控制器的绑定操作(APP_SUB_DOMAIN_DEPLOY参数开启)分析URL地址中的PATH_INFO信息获取请求的模块信息检测模块是否存在和允许访问判断并加载模块配置文件、别名定义、行为定义及函数文件判断并加载模块的动态配置和函数文件模块的URL模式判断模块的路由检测(URL_ROUTER_ON开启)PATH_INFO处理(path_info)标签位侦听并执行绑定行为URL后缀检测(URL_DENY_SUFFIX以及URL_HTML_SUFFIX处理)获取当前控制器和操作,以及URL其他参数URL请求调度完成(url_dispatch)标签位侦听并执行绑定行为应用开始(app_begin)标签位侦听并执行绑定行为调用SESSION_OPTIONS配置参数进行Session初始化(如果不是命令行模式)根据请求执行控制器方法如果控制器不存在则检测空控制器是否存在控制器开始(action_begin)标签位侦听并执行绑定行为默认调用系统的ReadHtmlCache行为读取静态缓存(HTML_CACHE_ON参数开启)判断并调用控制器的_initialize初始化方法判断操作方法是否存在,如果不存在则检测是否定义空操作方法判断前置操作方法是否定义,有的话执行Action参数绑定检测,自动匹配操作方法的参数如果有模版渲染(调用控制器display方法)视图开始(view_begin)标签位侦听并执行绑定行为调用Think\View的fetch方法解析并获取模版内容自动识别当前主题以及定位模版文件视图解析(view_parse)标签位侦听并执行绑定行为默认调用内置ParseTemplate行为解析模版(普通模式下面)模版引擎解析模版内容后生成模版缓存模版过滤替换(template_filter)标签位侦听并执行绑定行为默认调用系统的ContentReplace行为进行模版替换输出内容过滤(view_filter)标签位侦听并执行绑定行为默认调用系统的WriteHtmlCache行为写入静态缓存(HTML_CACHE_ON参数开启)调用Think\View类的render方法输出渲染内容视图结束(view_end)标签位侦听并执行绑定行为判断后置操作方法是否定义,有的话执行控制器结束(action_end)标签位侦听并执行绑定行为应用结束(app_end)标签位侦听并执行绑定行为执行系统的ShowPageTrace行为(SHOW_PAGE_TRACE参数开启并且不是AJAX请求)日志信息存储写入
如果你绑定了更多的应用行为的话,流程可能会更加复杂。
如果是部署模式下面的第二次请求的话,上面的流程中的步骤10~21是可以省略的。
thinkphp 系统流程的更多相关文章
- ThinkPHP系统流程
1.用户通过入口文件访问控制器2.控制器从模型层中提取数据3.控制器将数据返回模板页面
- 升鲜宝V2.0_生鲜配送行业,对生鲜配送行业的思考及对系统流程开发的反思_升鲜宝生鲜配送系统_15382353715_余东升
升鲜宝V2.0_生鲜配送行业,对生鲜配送行业的思考及对系统流程开发的反思_升鲜宝生鲜配送系统_15382353715_余东升 -----生鲜配送行业现状及存在问题----- 1. 从业者整体素质偏低 ...
- [课程设计]Scrum 1.2 Spring 计划&系统流程&DayOne燃尽图
多鱼点餐系统WEB Spring 计划 ● 产品BACKLOG 多鱼点餐系统产品BACKLOG ID Name Imp Est How to demo Notes 1 设计框架结构 10 8 利用美学 ...
- thinkphp系统常量与自定义常量
----------------------------------------Action中使用的系统常量 ----------------------------------------THINK ...
- asp.net 微信企业号办公系统-流程设计--流转条件设置(路由)
当一个步骤后面有多个步骤时,可以设置为根据设置条件系统自动判断该流向哪些步骤,也叫路由. 工作流没有单独的路由步骤来设置条件,流程条件通过双击连线弹出条件设置框来设置. 1.sql条件 即通过sql条 ...
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-策略设置
策略设置包括当前步骤的流转方式,处理人员,退回策略等设置. 流转类型:当前步骤后面有多个步骤时,此类型选择可以决定后续步骤的发送方式. 1.系统控制:由系统根据您在线上设置的流转条件来判断该发送到哪一 ...
- (转)Thinkphp系统常量 演示
Thinkphp2.1框架内置了许多系统常量, 具体如下: __ROOT__ : 网站根目录地址 __APP__ : 当前项目(入口文件)地址 __URL__ : 当前模块地址 __ACTION__ ...
- ThinkPHP系统变量,常量,序列化,反序列化,缓存
变量的输出: 在模板中输出一个变量有两种形式:{$list.name} {$list[‘name’]} 在模板中可以使用系统变量,以$Think.开头 系统变量:(举例选几个) 获得服务器的IP地址: ...
- thinkphp执行流程
1. 入口文件index.php 用户对url的访问首先被定位到http://<serverIp>/<appName>/index.php, 这里的入口文件index.php做 ...
随机推荐
- Kettle 中的循环
说道循环,小伙伴们肯定不陌生,就是重复干一件事:而kettle中的循环一般是发生在job中,因为job是串行执行的: kettle的循环有两种,一种是通过js脚本,另外一种是通过遍历前面步骤返回的每一 ...
- TFS中的账号和GIT中的账号
有些公司使用TFS来进行git的管理,这个时候很多人没有区分TFS中的账号和GIT的账号的区别:TFS的账号和GIT账号是两套不同的体系,使用TFS管理GIT GIT是不需要账号密码,但是必须在win ...
- GarsiaWachs算法
解决石子问题: 题目描述如下: 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得 ...
- react 组件的构造函数
constructor 函数时组件最先执行的函数 class childen extends react.Component{ constructor(props){ super(props); th ...
- Python 封装一个函数,查找文字字符串数字英文下标
def abc(str,data): count = [] numMax = 0 for a in range(len(str)): if a == 0: temp = str.find(data, ...
- NX二次开发-UFUN创建基准平面UF_MODL_create_plane
NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建基准平面 ] = {0.0, 0.0, ...
- NX二次开发-对话框加锁UF_UI_lock_ug_access
VC/MFC调用UG Dialog要进入加锁状态 加锁 UF_UI_lock_ug_access ( UF_UI_FROM_CUSTOM ); 此处为UF_UI_select的函数 解锁 UF_UI_ ...
- 实现组件props双向绑定解决方案
注意: 子组件不能直接修改prop过来的数据,会报错 方案一: 用data对象中创建一个props属性的副本 watch props属性 赋予data副本 来同步组件外对props的修改 watch ...
- Matlab求三重积分
Matlab求三重积分 求 \(\int_0^1 \int_0^1 \int_0^1 sin(\pi x_1 x_2 x_3) dx_1 dx_2 dx_3\) 代码是: triplequad(@(x ...
- HDU1556-Color the ball-前缀和/线段树/树状数组
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...