java 二次开发 架构 二次开发框架

您所在的位置:网站首页 java二次开发框架排行 java 二次开发 架构 二次开发框架

java 二次开发 架构 二次开发框架

2024-07-15 17:09| 来源: 网络整理| 查看: 265

进行禅道二次开发前有必要学习一下禅道使用的框架,本文将简单介绍zentaoPHP框架以及禅道的目录结构。

目录

zentaoPHP框架基本原理数据库操作数据验证分页其它禅道目录结构顶级目录config目录www目录module目录testcase模块common公用模块zentaoPHP框架

禅道项目使用zentaoPHP框架,基于b/s架构开发。

基本原理

zentaoPHP框架支持MVC(Model-View-Controller)软件架构模式,把软件系统分为三个基本部分:

模型(Model):实现程序的功能、数据管理和数据库设计。对数据库的增删改查可以放在这一层。控制器(Controller):负责转发用户请求,对请求进行处理,组织各种业务逻辑,准备数据。视图(View):负责渲染数据,图形界面设计,通过HTML方式呈现给用户。

zentaoPHP框架的基本原理:

通过apache服务将请求转交给index.php(\zentao\app\htdocs\index.php),由它来进行资源调度。index.php加载框架文件,初始化应用,解析URI请求,得到请求对应对模块名、方法和参数。比如URL:/zentao/testcase-browse-1.html 模块名为testcase,方法名为browse,1为参数。然后加载相应模块的control方法,model方法,然后渲染模板(view文件)、呈献给用户。数据库操作

zentaoPHP框架提供了用于操作数据库的对象类DAO,在\lib\dao\dao.class.php 中定义,加载框架时会自动生成 $this->dao 对象,可以在control, model,view层直接使用 $this->dao 来执行各种方法。

查询数据库使用 fetch 系列方法,增删改相关方法使用 exec() 方法。

比如禅道中查询所有用例:

$this->dao->select('*')->from(TABLE_CASE) ->where('deleted')->eq(0) ->fetchAll('id');

插入用例:

$this->dao->insert(TABLE_CASE)->data($case)->autoCheck()->exec();

更新用例:

$this->dao->update(TABLE_CASE)->data($case)->autoCheck()->where('id')->eq((int)$caseID)->exec();

删除用例:

$this->dao->delete()->from(TABLE_CASE)->where('id')->eq($Caseid)->exec();数据验证

zentaoPHP将数据验证放在了model层,提供了数据过滤的方法,包括了数据修正和数据验证。过滤方法在 \lib\filter\filter.class.php 文件中定义。

数据修正以禅道testcase模块创建用例方法为例,查看\module\testcase\model.php中的create方法:

$case = fixer::input('post') ->add('status', $status) ->add('version', 1) ->add('fromBug', $bugID) ->setDefault('openedBy', $this->app->user->account) ->setDefault('openedDate', $now) ->setIF($this->config->systemMode == 'new' and $this->app->tab == 'project', 'project', $this->session->project) ->setIF($this->app->tab == 'execution', 'execution', $this->session->execution) ->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion((int)$this->post->story)) ->remove('steps,expects,files,labels,stepType,forceNotReview') ->setDefault('story', 0) ->cleanInt('story,product,branch,module') ->join('stage', ',') ->get();首先调用fixer类的input方法,参数post表示是从$_POST 这个变量中获取数据。 add()方法是向数据中增加变量。 setDefault()方法表示当这个变量没有传值的时候,设成默认值。 setIF() 方法第一个参数是判断条件,后面两个分别是key和value。当条件为true时,设置$key = $value。 remove() 方法用于删除不需要的字段。 cleanInt()将变量转换为int类型。 join('stage', ',')将stage使用,连接起来。get方法返回一个经过修正的数据集合。

数据验证使用check相关方法:

$this->dao->insert(TABLE_CASE)->data($case) ->autoCheck() ->batchCheck($this->config->testcase->create->requiredFields, 'notempty') ->exec();

data方法将修正过的数据传递给dao对象,然后通过autoCheck()对其进行自动检查。batchCheck()方法会对一批字段进行非空的验证。

使用dao::isError()判断是否有错误,dao::getError()方法获取报错信息。

分页

以测试用例浏览页面为例,在testcase模块的control文件中的browse方法完成分页的功能,相关代码如下:

public function browse($recTotal, $recPerPage, $pageID) { /* Load pager. */ $this->app->loadClass('pager', $static = true); $pager = new pager($recTotal, $recPerPage, $pageID); $sort = common::appendOrder($orderBy); /* Get test cases. */ $cases = $this->testcase->getTestCases($productID, $branch, $browseType, $browseType == 'bysearch' ? $queryID : $suiteID, $moduleID, $sort, $pager); if(empty($cases) and $pageID > 1) { $pager = pager::init(0, $recPerPage, 1); $cases = $this->testcase->getTestCases($productID, $branch, $browseType, $browseType == 'bysearch' ? $queryID : $suiteID, $moduleID, $sort, $pager); } }

分页相关的参数主要包括recTotal, recPerPage和pageID这三个参数。

在model中定义的getTestCases方法,接收pager对象,并在dao查询的时候,调用pager($pager)方法来生成分页语句,返回用例数据:

public function getTestCases($pager) { return $this->dao->select(*)->from(TABLE_PROJECTCASE)->page($pager)->fetchAll(); }

然后将pager对象和用例数据赋值给view模板:

public function browse($recTotal, $recPerPage, $pageID) { /* Load pager. */ /* Get test cases. */ /* 赋值到模板。*/ $this->view->pager = $pager; $this->view->cases = $cases; }

在view模板中调用show()方法显示分页链接:

其它

zentaoPHP还提供了一些方法,比如生成链接方法createLink(),重定向locate(),加载指定模块loadModel() 等。

还提供了html,js和css类,其中html类可用于生成html标签:

html::a($href, $title, $target, $misc),生成超链接。 html::input($name, $value, $attr) 生成文本框。 html::select($name, $options, $selected, $attr),生成select标签。......

JS类提供了一些js方法,比如:

js::alert($message):生成一个警告框。 js::locate($url, $target):页面跳转。 js::reload($window):窗口重载。

上面仅对zentaoPHP框架进行了简单介绍,更详细内容可参考官方文档,

下面介绍禅道的基本目录结构。

禅道目录结构

在禅道二次开发(一):开发环境配置中介绍了在Linux中安装禅道的方法,这里介绍一下它的主要目录结构。

顶级目录

进入/opt/zbox/app/zentao 目录,禅道目录结构如下:

. ├── api ├── bin ├── config ├── db ├── doc ├── framework ├── lib ├── module ├── sdk ├── tmp └── www api:接口目录。 bin:存放禅道的一些命令行脚本。 config:存放禅道运行的主配置文件和数据库配置文件。 db:历次升级的数据库脚本和完整的建库脚本。 doc:文档。 framework:框架核心目录,禅道php框架的核心类文件,里面包含了router, control, model和helper的定义文件。 lib:常用的类。比如html,js和css类、数据库DAO类、数据验证fixer类等。 module:模块目录,存放具体的功能模块。 sdk:PHP sdk类。 tmp:存放禅道程序运行时的临时文件。 www:存放各种样式表文件,js文件,图片文件,以及禅道的入口程序index.php。config目录

config 目录存放禅道配置文件。

. ├── config.php ├── ext ├── filter.php ├── index.html ├── my.php ├── routes.php ├── timezones.php └── zentaopms.php config.php:ZenTaoPHP的config文件 ext:扩展目录 filter.php:数据过滤规则文件 my.php:可以覆盖config.php中的配置 routes.php:API路由 timezones.php:时区 zentaopms.php:配置文件,存放了数据库的定义。www目录. ├── api.php ├── checktable.php ├── data ├── favicon.ico ├── index.php ├── init.php ├── js ├── ok.txt ├── robots.txt ├── theme ├── tip4japanese.html └── x.php data:上传附件所在的目录。 js:存放js脚本文件,禅道用到的各种jquery插件和相应的功能函数。 theme:主题文件,包含了css文件和图片文件。 .htaccess:apache下面使用的url重写规则文件。 favicon.ico:禅道图标文件 index.php:整个禅道的入口程序,所有的请求都是通过index.php来进行转发。module目录

module目录下面的模块分别对应了禅道里面的某一个功能模块。整个禅道的功能,就是由这些模块组合而成。部分功能模块:

. ├── bug ├── caselib ├── common ├── execution ├── task ├── qa ├── testcase ├── testreport ├── testsuite └── testtasktestcase模块

以测试用例模块testcase为例,目录结构如下:

. ├── config.php ├── control.php ├── css ├── ext ├── js ├── lang ├── model.php └── view config.php:存放当前模块的配置项,也可以覆盖全局性的配置。 control.php:模块对应的控制器类文件。是整个testcase模块所有页面的入口。也就是说,testcase相关的页面浏览都可以在这个文件里面找到相应的方法定义。 model.php:模块对应的业务逻辑类文件,提供testcase相关数据库操作方法。 view:存放的各个方法的视图文件。比如testcase浏览页面,对应的模板就是browse.html.php。 css:testcase模块的样式表文件。 js:testcase模块的Javascript脚本文件。 lang:存放testcase模块的语言文件。zh-cn对应中文简体,zh-tw中文繁体,以此类推。如果需要修改禅道里面某些字段的名称或者配置,修改相应的文件即可。 ext:二次开发文件存放目录common公用模块

common公用模块里面存储的是禅道的公用功能,比如公用的语言文件、模板文件、model文件等。

common/model.php 提供了其他模块都有可能用到的一些方法。比如权限检查hasPriv(),菜单打印printMainMenu()等功能。 common/view 目录提供了公用的模板。比如 header.html.php 是模板公用的头文件;footer.html.php是模板公用的页脚文件;error.html.php 则是公用的出错信息提示的模板文件。还包含了各种jquery插件的初始化代码模板,比如colorbox.html.php 。 common/lang设置了公用的语言项。lang/zh-ch.php存储公用的语言文件。

参考资料:

zentaoPHP框架:https://devel.easycorp.cn/book/zentaophphelp/about-10.html https://www.zentao.net/book/zentaopmshelp/40.html

--THE END--

给时光以生命,而不是给生命以时光。——帕斯卡



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3