框架主要流程
<pre><code class="language-plantuml">@startuml
'title z-php 框架主流程
!includeurl https://raw.githubusercontent.com/xuanye/plantuml-style-c4/master/core.puml
GREEN_ARROW
skinparam BackgroundColor #FCFCFC
start
:/public/APP_NAME.php
入口文件;
partition **/core/v0.1/core.php** {
:定义常量;
note right
IN: 入口文件路径
APP_NAME: APP名
VERSION: 框架版本号
TIME: 服务器时间戳
IS_AJAX: 是AJAX请求?
IS_WX: 是微信客户端?
METHOD: 请求模式POST/GET
CORE: 框架路径
ROOT: 项目根路径
TMP: 临时文件路径
LOG: 日志文件路径(TMP内)
RUN: 运行文件路径(TMP内)
CACHE: 缓存文件路径(TMP内)
APP_PATH: APP的MVC文件路径
COMMON: 公用文件路径(所有APP公用)
PUB: 公开访问路径(入口文件所在文件夹路径)
VER: 项目版本号
APP: APP当前版本的MVC路径
RES: APP当前版本的前端静态资源路径
APP_RUN: APP当前版本的运行文件路径
APP_CACHE: APP当前版本的缓存文件路径
PHP_FILE: 入口文件名
____ROOT____: APP当前版本的公开访问URI(用于模板)
____TMP____: APP当前版本的临时文件URI(用于模板)
____RES____: APP当前版本的前端静态资源URI(用于模板)
endnote
:定义全局函数;
note right
zautoload() 懒加载callback
debug() 开启/关闭调试(F12控制台)
is_fullpath() 是否完整路径
a2r() 路径格式化为根URI(不带域名)
r2a() 路径格式化为绝对路径
P() 输出调试信息
ID() 从get或post获取id类参数并格式化
file_size_format() 带单位的文件尺寸
transcode() 转为UTF-8编码
getip() 获取IP
del_dir() 删除目录
endnote
:引入公用级全局函数
COMMON . 'functions.php';
:引入APP级全局函数
APP_PATH . 'functions.php';
:引入核心类
\core\v0.1\z\z.class.php;
note right
z::start() 开始运行
z::session() 会话
z::autoLoad() 懒加载(根据路径映射引入类文件)
z::config() 配置合并
z::mapping() 路径映射(命名空间与类文件路径)
z::input() php://input数据处理 输出常量**DATA**
router{} 路由类 输出常量**ROUTE**
ctrl{} 控制器类
debug{} 调试类
endnote
:注册调试句柄;
:注册懒加载zautoload();
note right
//第三方类库注册到懒加载示例
function qiniuLoader($class)
{
$path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
$file = COMMON.'lib/' . $path . '.php';
file_exists($file) && require_once $file;
}
zautoload('qiniuLoader');
endnote
:将公用级/APP级config追加到超全局数组;
:引入APP当前版本级全局函数
APP . 'functions.php';
:加载APP当前版本级config追加到超全局数组;
partition **z::start()** {
:self::input() php://input表单数据处理 输出到DATA常量;
:self::mapping() 命名空间映射;
:self::session() 会话功能;
:获取当前控制器与当前操作
APP.ctrl/$ctrl.class.php;
:执行控制器的前置方法init()(如有);
:执行控制器的当前方法($act);
note right
* 业务逻辑
* 视图view(template import的使用)
* model模型的引用
* lib类库的引用
endnote
:执行控制器的后置方法 after()(如有);
}
}
stop
legend
**知识点 :**
* 主要命名空间: z,ext,common,ctrl,model,lib,base
* 三层覆盖/追加(公用层COMMON,应用层APP_PATH,版本层APP,后向前覆盖/追加)
* 公用层,版本层 common/mapping.php 定义命名空间与类文件路径映射
* 公用层,版本层 common/config.php 版本号,数据库等配置文件
* 公用层,版本层 common/base/DB_NAME.base.php数据库表结构及验证
* $GLOBALS全局数组的使用
endlegend
@enduml
</code></pre>