ThinkPHP访问流程在手册1.11系统流程里就有介绍,我阅读的ThinkPHP的版本是3.1.3,大家可以看下手册,基本的流程也有,现在就是详细去介绍一下ThinkPHP的访问流程.(调试模式下的,在部署模式下,会把中间的URL解析,文件加载之类的,都封装到一个文件里)
1.入口文件(index.php)
入口文件最常见得就是index.php,而在这里可以定义项目名称,路径,缓存文件存放路径之类的.最后要加载Thinkphp/ThinkPHP.php
指向下一个文件的地方是require ‘ThinkPHP/ThinkPHP.php‘;
2.ThinkPHP/ThinkPHP.php
这个文件定义基本的系统目录常量,框架引擎判断,以及部署模式和调试模式的判断
指向下一个文件的地方是 require THINK_PATH.‘Common/runtime.php‘;
3.runtime.php(~runtime.php)
PHP环境判断,URL定义,项目目录常量定义,核心文件加载,项目目录生成.
指向下一个文件的地方是Think::Start();
4.Think.class.php
错误方式定义,异常定义,设置自动加载,缓存配置参数,语言参数等
App::run();
5.App.class.php
设置时区,加载动态的项目公共文件和配置文件,一些系统常量的定义,如(IS_POST)等,POST,GET等传值过滤,
指向下一个文件的地方是Dispatcher::dispatch();在App.class.php的第38行
6.Dispatcher.class.php
URL解析,获取分组,模块,操作名,包括URL四种方式的详细定义,URL路由都在这里定义的.
解析完成以后回到App.class.php并且执行App.exec
7.App.class.php App::exec
执行应用程序,包括前置和后置操作执行,当前方法执行,以及空模块判断,(如IndexAction.class.php等,就会在这里直接执行)
在执行IndexAction.class.php的时候,有extends继承Action.class.php
8.Action.class.php基类
实例化视图类 赋值,传值给View,获取Action,ajax判断,这里面的方法很多,值得仔细研究下.
在调用assign,display,show等方法的时候,会到View中操作.
9.View.class.php 视图类
包括获取IndexAction.class.php中定义的变量,以及解析模板,输出模板等功能
执行下一文件的方法 tag(‘view_parse‘,$params);在View.class.php View::fetch的方法中.
10. ParseTemplateBehavior.class.php 模板解析
其实是对缓存的判断以及对采用哪种模板引擎去解析模板.
在$tpl = Think::instance(‘ThinkTemplate‘); 在第62行
11. ThinkTemplate.class.php ThinkPHP的模板解析类
这里才是真正得模板解析,包括对系统标签的解析,以及对自定义标签的判断,解析完成以后直接放入缓存然后include
ThinkPHP源码阅读1-------访问流程