欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

禅道(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框架流程

               禅道(zentao)PHP框架介绍

 

 

三、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