路由分为html路由、console路由、rest路由
html路由是用来将数据组合成网页发布的,需要我们自己定制模板
console路由是用来在控制台上运行的程序,无需web服务器支持
rest路由是用来将数据组合成JSON格式发布的,可以为内部或者外部的使用提供支持
认证是为rest路由提供权限检查使用的,在rest路由模式下,可以设置哪些资源可以背什么样的角色访问,可以设置哪些资源需要具备什么样的条件才能访问
TFWEB的后端包括一个程序,一个模板
程序是一个继承自TFPage的类
模板基于Smarty实现
程序和模板一一对应
tfjs 是TFWEB框架的前端基础库,基于jQuery实现
UI 是TFWEB框架的前端UI基础库,根对象为 TFHomeUI,结构如下
window.TFHomeUI = { Classes : { } };
UI库包含一系列方法,用于展示表格,表单,列表等等
注册一个表单
TFHomeUI.registerFormBox = function(formName, formDatas, formOpts){ };
加载一个表单
TFHomeUI.loadFormBox = function(formName, formExName, formOpts){ if(formExName == null) formExName = formName; };
在对话框内加载一个表单
TFHomeUI.loadFormBoxInDialog = function(formName, formExName, formOpts){ if(formExName == null) formExName = formName; };
注册一个表格(列表)
TFHomeUI.registerTableBox = function(tableName, tableDatas, tableOpts){ };
加载一个表格(列表)
TFHomeUI.loadTableBox = function(tableName, tableExName, tableOpts){ if(tableExName == null) tableExName = tableName; };
有三种方式加载我们注册好的组件
通过指定目标容器的selector,将组件实例放入selector对应的容器内
TFHomeUI.loadFormBox( 'component', 'component', { compBoxSL : '.component-box-selector' } );
通过指定目标容器的句柄,将组件实例放入容器内
TFHomeUI.loadFormBox( 'component', 'component', { compBox : $('.component-box-selector') } );
通过回调函数,根据自己的逻辑处理组件实例
TFHomeUI.loadFormBox( 'component', 'component', { compBoxCB : function(o){ $('.component-box-selector').append(o); } } );
UI.Vue 是TFWEB框架前端元素控制基础库,用来注册基础元素组件,使用基础元素组件
我们可以通过UI.Vue注册一些基础元素组件,并在项目当中使用它们
UI.Vue还实现了UI的表格、表单的控制实现,就是说通过Vue去实现了表格、表单的基础功能的组件
UI.Vue.Tongfu 是TFWEB框架自带的一个前端组件库,包括了基本的表单元素组件、表格元素组件、布局框架组件等等
我们示范一个网页路由的基础代码
目录结构参考TFWEB视图说明
class PCEntry extends TFSystemHtml { public function __construct($opts) { // init parent::__construct($opts, "index", "index"); // meta $this->PEO->setItem('author', '', 'Metas'); $this->PEO->setItem('keywords', '', 'Metas'); $this->PEO->setItem('description', '', 'Metas'); // system $this->PEO->initLog(); $this->PEO->initTFCache(); } protected function prepareOP() { $myPageLoaderObj = new TFPageLoader($this->PEO, $this->smartyObj); $myPageLoaderObj->load(); } }
我们示范一个控制台路由的基础代码
目录结构参考TFWEB视图说明
class ConsoleEntry extends TFSystemConsole { public function __construct($opts) { // init parent::__construct($opts); // system $this->PEO->initLog(); $this->PEO->initTFDO(); $this->PEO->initTFCache(); } protected function prepareData() { $myRESTLoaderObj = new TFRESTLoader($this->PEO); $myRESTLoaderObj->auth(false); $myRESTLoaderObj->load(); return $myRESTLoaderObj->getData(); } }
我们示范一个REST路由的基础代码
目录结构参考TFWEB视图说明
class RESTEntry extends TFSystemRest { public function __construct($opts) { // init parent::__construct($opts); // system $this->PEO->initLog(); $this->PEO->initTFDO(); $this->PEO->initTFCache(); } protected function prepareData() { $myRESTLoaderObj = new TFRESTLoader($this->PEO); $myRESTLoaderObj->auth( // enable auth true, // rules array( // default auth method 'default' => "local", // no default models 'noDefaultModels' => array( ), // user auth methods 'matches' => array( ), // no auth models 'noAuthModels' => array( ), ) ); $myRESTLoaderObj->load(); return $myRESTLoaderObj->getData(); } }
我们建立一个页面,用来摆放页面元素
目录结构参考TFWEB视图说明
程序名称为 index,后面的 Page 为固定格式
class indexPage extends TFPage { public function load() { } }
模板内容遵循Smarty规范
<!DOCTYPE html> <html> <head> <% $_TFPage->getHead() %> </head> <body> Hello world ! </body> </html>
我们通过制作一个表格来给大家展示如何使用前端控制器
TFHomeUI.registerTableBox( 'table-sample', // 组件名称 { // 表格参数设定 info : { id : 'table-sample', list_rest_url : 'api/sample/_list', // 表格数据REST网址 list_params : {}, // 表格数据参数列表 cbfield : 'mId', // checkbox字段名称 pages_visible : true, // 分页行显示控制 actions_visible : true, // 操作列显示控制 group_actions_visible : true, // 批量操作显示控制 }, // 表格回调函数设定 callbacks : { // 分页行的分页信息自定义回调函数 getPageStat : function(){ do_resize(); return "共有结果 "+this.pages.total+" 篇,显示从 "+this.pages.rowsbegin+" 到 "+this.pages.rowslength+",每页显示 "+this.pages.perpage+" 篇,共分 "+this.pages.tolpage+" 页"; }, // 行数据的过滤自定义回调函数 filterData : function(d){ $.forEach(d.data, function(item, idx){ }); return d; } } }, { // 组件构造器函数 mounted : function(){ }, // 组件自定义函数列表 methods : { } } }
我们通过制作一个表单来给大家展示如果通过前端控制器
TFHomeUI.registerFormBox( 'form-sample-add', // 组件名称 { // 表单参数设定 info: { method: 'post', action: $.U('api/sample/_add') }, // 表单验证设定 validators: { }, // 表单元素设定 elements: { title: { type: 'text', label: '', name: "title", placeholder: "标题", error: "" } } }, { // 组件自定义函数列表 methods : { // 处理成功回调函数 onSuccess : function(d){ }, // 处理失败回调函数 onError : function(d){ } } } );
我们通过下面的代码,把定义的表单加载到一个html容器里
TFHomeUI.loadFormBox( 'form-sample-add', // 组件名称 'form-sample-add-ex', // 组件实例名称(可以和组件名称一样,页面内需唯一) { compBoxSL : '.form-news-new', data : { form : { elements : { content : { editorId : 'newsnew'+TFWEB.env.socialid } } } } } );
注意事项
注册时候的 info、validators、elements 可以在调用的时候通过 data.form.xxx 进行修改
data : { form : { info : { action : 'new_action' } } }
通过在调用到时候的 data.form.data.xxx 可以设置表单项目默认值
data : { form : { data : { userName : '默认用户名称' } } }