- 1 认识 zentaoPHP 框架
- 2 入口文件
- 3 配置管理
- 4 模块管理
- 4.1 控制器(control)
- 4.2 业务逻辑(model)
- 4.2.1 定义 model
- 4.2.2 跨模块调用
- 4.2.3 获取模块名
- 4.2.4 删除记录
- 4.2.5 数据处理对象 dao
- 4.3 模版视图(view)
- 4.4 从 hello world 开始
- 4.5 模块的配置
- 4.6 模块的语言
- 4.7 模块的 CSS 和 JS 管理
- 5 类库
- 6 扩展机制
- 6.1 扩展机制简介
- 6.2 新增独立模块
- 6.3 对控制层(control)扩展
- 6.4 对模型层(model)扩展
- 6.5 对视图层(view)扩展
- 6.6 对样式表和js进行扩展
- 6.7 对语言配置进行扩展
框架流程
- 2021-09-27 10:57:10
- admin
- 2255
- 最后编辑:admin 于 2023-08-24 12:41:58
zentaoPHP 框架采用单一入口模式开发,所有用户请求都是从入口文件(index.php)开始的,由入口文件集中调度控制,并且所有的应用的入口文件都是类似的。它的基本原理是通过设置 apache 或者其他 webserver,将所有的请求都转交给 index.php。index.php 加载框架文件,初始化应用,然后分析请求,得到请求对应对模块名、方法和参数,然后加载相应模块的 control 方法,model 方法,最后渲染模板,展示给用户。
入口文件中其实包括了框架执行的整个流程:
1.关闭错误输出并开启输出缓冲
error_reporting(0); ob_start();
2.加载框架核心文件
3.0版本开始支对持框架核心扩展,它们继承自 base 文件夹中的原核心文件。
include './framework/router.class.php'; include './framework/control.class.php'; include './framework/model.class.php'; include './framework/helper.class.php';
3.创建应用
初始化 router 类,创建一个应用。
$app = router::createApp($appName, $appRoot, $className);
创建应用时都做了什么:
设置相关路径;
初始化 $config 全局对象,加载应用公共的主配置文件 config.php;
静态加载类库里的类(front、filter、dao、mobile);
设置超级变量,将预定义数组转化为对象的形式访问;
设置 debug、错误句柄、时区、开启 session;
自动连接到数据库,生成 $dbh 全局对象;
加载 common 模块的语言文件,生成 $lang 全局对象;
框架中,多站点、多语言、多主题风格、客户端设备监测这些功能默认是关闭的(在 config 中控制开关)。如果开启,则这里还会进行相应的站点代号设置、客户端语言设置、客户端设备类型监测、客户端主题设置等操作。
4.加载公共模块
加载公共模块,实例化 common 模块的 model 对象 $common。公共模块比较特殊,它会执行每次请求都需要执行的操作。比如开启 session,设置头部信息等。
$common = $app->loadCommon();
5.解析请求
解析用户请求根据网站的请求类型分为 pathinfo(2) 和 get 两种形式。但是流程是一样的:
通过解析用户访问请求的 get 或 path_info 地址,最终得到将被调用的目标模块名、方法名和控制器文件。
$app->parseRequest();
6.加载模块
有了请求的目标模块名、方法名和控制器文件,接下来就根据这些来加载该目标模块。
$app->loadModule();
首先引入模块的控制器(control)文件:先检查是否有扩展目录,若没有则直接引入默认 control 文件,若有扩展目录,则引入请求方法的扩展文件,若没有请求方法的扩展文件,则还是引入默认 control 文件。
然后获取 control 文件中的类名,并创建控制器对象。
实例化控制器对象时都做了什么:
把全局变量 $app、$lang、$config、$dbh 设为其成员属性,方便其子类调用;
设置当前模块名和方法名,加载并实例化当前模块的 modle 类,可用 $this->模块名进行访问。
设置客户端设备类型,并设置不同设备类型的视图文件前缀。
初始化视图对象 $this->view,并将全局变量 $app、$lang、$config、$common 设为其成员属性,方便调用。
设置超级变量,从 $app 引用过来。
然后从 tmp/defaultvalue/ 目录下加载所有默认值设置。
之后根据请求的方式 ,设置请求的参数。
最后调用相应的方法,进行业务逻辑处理并渲染输出视图。
display() 方法渲染输出视图内容的流程:
渲染方式:json 或 html(默认)。对于 html 视图类型渲染:
设置视图文件:包括目标方法的主视图文件、视图扩展文件及钩子脚本。
获取作用于当前方法页面的 CSS 和 JS(包括该模块公用的 CSS/JS + 当前方法的 CSS/JS + 扩展的 CSS/JS),分别存储于框架内置的模板变量 $pageCSS、$pageJS 中,框架会在头部和脚部模版文件中引入 CSS 和 JS。
输出视图 output。
7.输出内容
最后因为 PHP 不能识别 UTF-8 BOM 头,所以框架在输出内容之前会先去掉 BOM 头。
echo helper::removeUTF8Bom(ob_get_clean());
注:入口文件并不一定都是指 index.php 文件,因为我们可以为不同的项目应用创建不同的入口文件,例如,前台的入口文件为 index.php ,后台的入口文件可能是admin.php。