天下无坑

天下无坑


框架主要流程

@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

页面列表

ITEM_HTML