禅道(zentao)PHP框架介绍
程序员文章站
2022-07-05 09:10:39
一、zentaoPHP目录结构 1、*目录结构 config: 配置文件所在的目录。包含了config.php和my.php db: demo应用所需要的blog.sql framework: 包含了框架的核心文件。 js: 包含了js脚本文件。 ......
一、zentaoPHP目录结构
1、*目录结构
config: 配置文件所在的目录。包含了config.php和my.php
db: demo应用所需要的blog.sql framework: 包含了框架的核心文件。
js: 包含了js脚本文件。 lib: 包含了常用的类文件。
module: 模块目录,每个模块一个目录,存放在module目录下面。
theme: 主题文件,包含了css文件和图片文件。
.htaccess: apache下面使用的url重写规则文件。
favicon.ico: 小图标文件。
index.php: 入口程序。
2、模块的目录结构
config.php: 这个模块的配置文件,可以用来存放专门针对这个模块的配置,也可以覆盖全局性的配置。
lang: 存放各个语言的文件。比如中文存为zh-cn.php,英语存为en.php,繁体存为zh-tw.php。
control.php 为这个模块对应的控制器类文件。
model.php 为这个模块对应的业务逻辑类文件。
view: 存放的各个方法的视图文件。比如index.html.php是index方法的模板文件
二、zentaoPHP框架流程
三、zentaoPHP调用流程源码分析
1、访问入口
zentaopms/www/index.php
2、引入框架包
include '../framework/router.class.php';
include '../framework/control.class.php';
include '../framework/model.class.php';
include '../framework/helper.class.php';
3、创建应用实例
$app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
3.1、 初始化应用实例
public function __construct($appName = 'demo', $appRoot = '')
{
//初始化各种路径
$this->setPathFix();
$this->setBasePath();
$this->setFrameRoot();
$this->setCoreLibRoot();
$this->setAppRoot($appName, $appRoot);
$this->setTmpRoot();
$this->setCacheRoot();
$this->setLogRoot();
$this->setConfigRoot();
$this->setModuleRoot();
$this->setWwwRoot();
$this->setThemeRoot();
$this->setDataRoot();
//初始化主配置(zentaopms/config/config.php)
$this->loadMainConfig();
$this->loadClass('front', $static = true);
$this->loadClass('filter', $static = true);
$this->loadClass('dao', $static = true);
$this->loadClass('mobile', $static = true);
$this->setSuperVars();
$this->setDebug();
$this->setErrorHandler();
$this->setTimezone();
$this->startSession();
if($this->config->framework->multiSite) $this->setSiteCode() && $this->loadExtraConfig();
// 连接数据库
if($this->config->framework->autoConnectDB) $this->connectDB();
if($this->config->framework->multiLanguage) $this->setClientLang();
$needDetectDevice = zget($this->config->framework->detectDevice, $this->clientLang, false);
$this->clientDevice = $needDetectDevice ? $this->setClientDevice() : 'desktop';
if($this->config->framework->multiLanguage) $this->loadLang('common');
if($this->config->framework->multiTheme) $this->setClientTheme();
}
4、解析URL请求
$app->parseRequest();
/* 框架路由相关设置。Routing settings. */
$config->requestType = 'PATH_INFO'; // 请求类型:PATH_INFO|PATHINFO2|GET。 The request type: PATH_INFO|PATH_INFO2|GET.
$config->requestFix = '-'; // PATH_INFO和PATH_INFO2模式的分隔符。 The divider in the url when PATH_INFO|PATH_INFO2.
$config->moduleVar = 'm'; // 请求类型为GET:模块变量名。 requestType=GET: the module var name.
$config->methodVar = 'f'; // 请求类型为GET:模块变量名。 requestType=GET: the method var name.
$config->viewVar = 't'; // 请求类型为GET:视图变量名。 requestType=GET: the view var name.
$config->sessionVar = 'zentaosid'; // 请求类型为GET:session变量名。 requestType=GET: the session var name.
$config->views = ',html,json,mhtml,xhtml,'; // 支持的视图类型。 Supported view formats.
5、检查权限
$common->checkPriv();
6.载入模块
$app->loadModule();
6.1、 根据请求url解析出来的模块以及方法找到对应的 control 以及function 进行初始化和调用
/*
* 创建control类的实例。(相关control _construct类构造方法进行实例初始化)
* Create a instance of the control.
**/
$module = new $className();
if(!method_exists($module, $methodName)) $this->triggerError("the module $moduleName has no $methodName method", __FILE__, __LINE__, $exit = true);
$this->control = $module;
/* 调用该方法 Call the method. 调用相关模块control的function 根据返回结果渲染 view 的相关html.php 页面 view 页面和 function 方法名一致*/
call_user_func_array(array($module, $methodName), $this->params);
本文地址:https://blog.csdn.net/hjlyffsina/article/details/112280795