首页技术thinkphp5手册(thinkphp运行目录)

thinkphp5手册(thinkphp运行目录)

编程之家2026-07-01983次浏览

这篇文章给大家聊聊关于thinkphp5手册,以及thinkphp运行目录对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

thinkphp5手册(thinkphp运行目录)

如何在thinkphp中使用b-jui

B-JUI前端框架

B-JUI(Bootstrap for DWZ)是一个富客户端框架,基于DWZ-jUI富客户端框架修改。

本文是B-JUI中文使用手册,包括使用示例代码,感兴趣的同学参考下。

概览

B-JUI仅有一个主页面(document),框架内的所有子页面将通过Ajax获取后作为一个页面片段附加到主页面上,外部页面则通过iframe嵌入主页面,本节介绍 B-JUI的主页面结构。

HTML5文档类型

thinkphp5手册(thinkphp运行目录)

同Bootstrap, B-JUI使用 HTML5文档类型,参照下面的格式进行设置。

<!DOCTYPE html>

<html lang="zh-CN">

...

</html>

主页面结构(仅body部分)

thinkphp5手册(thinkphp运行目录)

主页面由上(页头)、中左(导航菜单)、中右(工作区)、下(页脚)四部分组成,其中左侧导航菜单可收缩。结构如下:

<header class="bjui-header" id="bjui-header">

<!--页头-->

</header>

<div class="bjui-leftside" id="bjui-leftside">

<!--导航菜单-->

</div>

<div id="bjui-container">

<!--工作区-->

</div>

<footer class="bjui-footer" id="bjui-footer">

<!--页脚-->

</footer>

子页面(即页面片段[后面简称:页片])结构

页片通常由两部分组成,也可以只保留bjui-pageContent部分,其中bjui-pageContent部分可选bjui-headBar(顶部工具条)和bjui-footBar(底部工具条)。结构如下:

<div class="bjui-pageHeader">

<!--顶部模块[如:功能按钮、搜索面板]-->

</div>

<div class="bjui-pageContent">

<div class="bjui-headBar">

<!--顶部工具条-->

</div>

<div data-layout-h="0">

<!--内容区-->

</div>

<div class="bjui-footBar">

<!--底部工具条-->

</div>

</div>

data-layout-h属性表示该容器为页片自适应布局,当值为0时,B-JUI会为该容器的高度自动赋值为:本页片总高度减去本页片中的固定元素(bjui-pageHeader\bjui-headBar\bjui-footBar)高度。

data-layout-h属性值不等于0时,该容器高度为本页片总高度减去属性值。

需要自定义固定元素(块级元素有效),请为该元素添加属性data-layout-fixed="true"

完整的页片详见B-JUI源代码的table.html,仅bjui-pageContent部分的页片详见form.html

元素ID命名规范

因为本框架默认所有内容都位于一个Document中,所以为元素命名ID的时候需要做到唯一性,如果确实不可避免的会出现有重复ID的现象,需要操作当前页片的元素时,尽量用:

$.CurrentNavtab.find('#dom-id'),在当前标签工作区中查找指定ID的元素。

或$.CurrentDialog.find('#dom-id'),在当前弹窗中查找指定ID的元素。

标签式工作区(navtab)

B-JUI框架的整个工作区部分就是一个navtab组件,本组件位于主页面的"#bjui-container"容器内,固定的html结构如下:

<div id="bjui-navtab" class="tabsPage">

<div class="tabsPageHeader">

<div class="tabsPageHeaderContent">

<ul class="navtab-tab nav nav-tabs">

<li data-tabid="main" class="main active"><a rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" href="javascript:;"><span>我的主页</span></a></li>

</ul>

</div>

<div class="tabsLeft"><i class="fa fa-angle-double-left"></i></div>

<div class="tabsRight"><i class="fa fa-angle-double-right"></i></div>

<div class="tabsMore"><i class="fa fa-angle-double-down"></i></div>

</div>

<ul class="tabsMoreList">

<li><a rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" href="javascript:;">我的主页</a></li>

</ul>

<div class="navtab-panel tabsPageContent layoutBox">

各页片内容区域

</div>

</div>

用法(如何创建一个navtab):

DOM点击触发:

<a rel="external nofollow" href="mytab.html" data-toggle="navtab" data-id="mynavtab" data-title="我的业务页面">打开navtab</a>

<button type="button" class="btn-green" data-toggle="navtab" data-id="mynavtab" data-url="mytab.html" data-title="我的业务页面">打开navtab</button>

jQuery:

$(selector).navtab({id:'标签的id', url:'载入页片的url', title:'标签的标题'})

取得当前navtab的内容容器:$.CurrentNavtab

参数:

名称类型默认值描述 id string navtab标签的ID,如果指定重复,将覆盖现有的ID相同标签。 title string New tab标签打开后显示的名称。 url string undefined请求数据的url。 type string GET Http请求方式,可选‘GET/POST’。 data object{}请求url时,需要发送的data数据。

方法:

这样调用navtab的方法:

$(selector).navtab('方法名',参数1,...,参数n)

如要切换到某个标签:

$(selector).navtab('switchTab',标签ID)

方括号的参数,表示该参数可选。

可用的方法:

switchTab(tabid):切换到某个标签。

refresh(tabid):刷新某个标签。

reload(options):重新载入某个标签,options同navtab默认参数,如果未指定ID,则默认重载入当前标签。

closeTab(tabid):关闭某个标签。

closeCurrentTab([tabid]):关闭当前标签。

closeAllTab():关闭所有标签。

事件:

这样监听navtab的事件:

$(document).on('bjui.beforeLoadNavtab', function(e){

var$navtab=$(e.target)

// do something...

})

名称描述 bjui.beforeLoadNavtab载入标签内容前的事件 bjui.beforeCloseNavtab关闭标签前的事件

弹出窗口(dialog)

弹出窗口分为普通弹出窗口和模态弹出窗口,普通弹出窗口可通过taskBar组件进行最小化等操作。弹出窗口的DOM结构会放入Body中,结构如下:

<div class="bjui-dialog bjui-dialog-container">

<div class="dialogHeader">

<!--最大化、最小化、关闭等按钮区-->

<h1><!--标题--></h1>

</div>

<div class="dialogContent layoutBox unitBox">

<!--页片内容区-->

</div>

<!--用于调整大小的div片断-->

</div>

用法(如何创建一个dialog):

DOM点击触发:

<a rel="external nofollow" href="mydialog.html" data-toggle="dialog" data-id="mydialog" data-title="我的弹出窗口">打开弹出窗口</a>

<button type="button" class="btn-green" data-toggle="dialog" data-id="mynavtab" data-url="mytab.html" data-title="我的弹出窗口">打开弹出窗口</button>

jQuery:

$(selector).dialog({id:'弹窗的id', url:'载入页片的url', title:'弹窗的标题'})

取得当前dialog:$.CurrentDialog

参数:

名称类型默认值描述 id string navtab弹窗的ID,如果指定重复,将覆盖现有的ID相同弹窗。 title string New tab弹窗打开后显示的名称。 url string undefined请求数据的url。 type string GET Http请求方式,可选‘GET/POST’。 data object{}请求url时,需要发送的data数据。 width int 500弹窗的宽度。 height int 300弹窗的高度。 max boolean false打开弹窗时直接最大化。 mask boolean false是否模态窗口。 resizable boolean true可以调整弹窗的大小。 drawable boolean true可以拖动弹窗。 maxable boolean true是否显示最大化按钮。 minable boolean true是否显示最小化按钮(模态弹窗无效)。

方法:

调用方式同navtab:如要关闭某个弹窗:

$(selector).dialog('close',弹窗ID)

方括号的参数,表示该参数可选。

可用的方法:

switchDialog(id):切换到某个弹窗(模态弹窗无效)。

refresh(id):刷新某个弹窗。

reload(options):重新载入某个弹窗,options同dialog默认参数,如果未指定ID,则默认重载入当前弹窗。

close(id):关闭某个弹窗。

closeCurrent():关闭当前弹窗。

事件:

这样监听dialog的事件:

$(document).on('bjui.beforeLoadDialog', function(e){

var$dialog=$(e.target)

// do something...

})

名称描述 bjui.beforeLoadDialog载入弹窗内容前的事件 bjui.beforeCloseDialog关闭弹窗前的事件

Ajax

本节主要介绍B-JUI框架中的Ajax操作,回调函数等。

Ajax操作:

ajax搜索-主要用于搜索表单,分页表单,例:B-JUI源码"table.html"中的#pagerForm:

<form id="pagerForm" data-toggle="ajaxsearch" action="table.html" method="post">

ajax重置搜索-主要用于重置搜索表单,data-clear-query属性告诉form是否清空查询参数,仅保留分页及字段排序信息,例:B-JUI源码"table.html"中的清空查询按钮:

<a class="btn btn-orange" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" href="javascript:;" data-toggle="reloadsearch" data-clear-query="true" data-icon="undo">清空查询</a>

ajax载入-主要用于为指定容器载入url的内容,data-target属性值为选择器表达式,告诉ajax载入的内容放到该容器,适合用来做局部刷新:

<a rel="external nofollow" href="table-edit.html" data-toggle="ajaxload" data-target="#D11">加载内容</a>

ajax动作-主要用于执行ajax命令,如“删除”,data-confirm-msg属性用于在操作前进行确认提示:

<a rel="external nofollow" rel="external nofollow" rel="external nofollow" href="del.html" class="btn btn-red" data-toggle="doajax" data-confirm-msg="确定要删除该行信息吗?">删除数据</a>

ajax导出-主要用于导出信息(下载文件),data-confirm-msg属性用于在操作前进行确认提示:

<a rel="external nofollow" rel="external nofollow" href="book1.xlsx" data-toggle="doexport" data-confirm-msg="确定要导出信息吗?">导出全部</a>

ajax导出选中项-主要用于导出选中项信息(下载文件),data-confirm-msg属性用于在操作前进行确认提示,data-idname属性指定发送到后台的字段名称,默认“ids”,data-group属性用于指定复选框的name:

<a rel="external nofollow" rel="external nofollow" href="book1.xlsx" data-toggle="doexportchecked" data-confirm-msg="确定要导出选中项吗?" data-idname="expids" data-group="ids">导出选中项</a>

ajax删除选中项-主要用于导出选中项信息(下载文件),data-confirm-msg属性用于在操作前进行确认提示,data-idname属性指定发送到后台的字段名称,默认“ids”,data-group属性用于指定复选框的name:

<a rel="external nofollow" rel="external nofollow" rel="external nofollow" href="del.html" data-toggle="dodelchecked" data-confirm-msg="确定要删除选中项吗?" data-idname="delids" data-group="ids">导出选中项</a>

Ajax回调:

ajaxsearch、doajax、dodelchecked三种ajax操作支持自定义ajax回调函数,自定义的回调函数放到data-callback属性,写法如下:。

<a rel="external nofollow" rel="external nofollow" rel="external nofollow" href="del.html" class="btn btn-red" data-toggle="doajax" data-confirm-msg="确定要删除该行信息吗?" data-callback="mycallback">删除数据</a>

function mycallback(json){

//do something...

}

服务端返回的JSON参数如下:

名称类型描述 statusCode int必选。状态码(ok= 200, error= 300, timeout= 301),可以在BJUI.init时配置三个参数的默认值。 message string可选。信息内容。 tabid string可选。待刷新navtab id,多个id以英文逗号分隔开,当前的navtab id不需要填写,填写后可能会导致当前navtab重复刷新。 closeCurrent boolean可选。是否关闭当前窗口(navtab或dialog)。 forward string可选。跳转到某个url。 forwardConfirm string可选。跳转url前的确认提示信息。

默认的回调函数会根据当前触发元素的位置确定是刷新navtab还是dialog,或是局部div容器。

可调用的返回信息提示:

$(selector).bjuiajax('ajaxDone', json)

表格

表格的Class同Bootstrap,仅调整了padding值,使表格显示得更紧凑。

.table少量的padding和水平分隔线。

.table-striped条纹状表格 [IE8不支持]。

.table-bordered带边框表格。

.table-hover附加鼠标悬停效果。

表格表头字段排序按钮实现:

<th data-order-field="sex">姓名</th>

<th data-order-direction="asc" data-order-field="createtime">创建时间</th>

data-order-field=""属性令本字段可排序,属性值为与后台交互的字段名称。

data-order-direction属性表示本字段的当前排序状态,可选值(asc/desc)

普通表格

普通的表格,可显示列表状条目,或布局表单,表头字段可附加排序按钮。

完整的实例详见B-JUI源代码的table.html。

固定表头表格

表格的头可固定住,可调整各列的宽度,表头字段可附加排序按钮。

<table data-toggle="tablefixed" data-width="100%" data-layout-h="0">

表格添加属性data-toggle="tablefixed"后就会固定表头,B-JUI默认为固定的表头的表格添加Class:table table-striped table-bordered table-hover,如果该table设置有Class,则以设置的为准

data-width属性可定义固定表格的宽度,默认为"100%",可设置大于100%或固定值,如:150%和1200都是合法的,超过navtab工作区的宽度时会出现横向滚动条。

完整的实例详见B-JUI源代码的table-fixed.html。

可编辑表格

用于需要动态添加简单行内容的地方。

<table class="table table-bordered table-hover table-striped" data-toggle="tabledit" data-initnum="0" data-layout-h="0">

<thead>

<tr>

<th title="No."><input type="text" name="edit[#index#].id" class="no" data-rule="required" value="1" size="2"></th>

<th title="姓名"><input type="text" name="edit[#index#].name" data-rule="required" value="" size="5"></th>

<th title="" data-addtool="true" width="100">

<a rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" href="javascript:;" class="btn btn-red row-del" data-confirm-msg="确定要删除该行信息吗?">删</a>

</th>

</tr>

</thead>

</table>

实现步骤:

表格添加属性data-toggle="tablefixed";

thead中添加上对应的表单信息,字段名放到title属性上;

若想在某列上显示添加按钮,需在对应列上添加属性data-addtool="true";

若每行显示删除按钮,需为删除按钮添加Classrow-del,如果要确认才能删除,需为删除按钮添加属性data-confirm-msg="删除提示信息"。

表格的data-initnum属性,表示载入本页片时,初始化的添加行数,值为0时不需写。

外部触发添加行事件:

按钮式:

<button type="button" class="btn-green" data-toggle="tableditadd" data-target="#tabledit1" data-num="1">添加编辑行</button>

data-target属性设置编辑表格的jQuery选择器,data-num属性设置点击时添加的行数。

jQuery:$(selector).tabledit('add',编辑表格的jQuery对象,待添加的行数)

$(selector).tabledit('add',$('#tabledit1'), 2)

完整的实例详见B-JUI源代码的table-edit.html。

thinkphp5 怎么写公共控制器

问题分析:

公共控制器和普通的控制器没什么本质上的区别。

在大部分的情况下。就是一个多次继承的关系。

公共控制器继承thinkphp的控制器。实际的控制器再继承公共控制器。

但是有一点需要注意的是,如果把公共控制器写在controller文件夹下的话。外部是能够访问到的。

推荐方案:

如果不是必须的情况下。尽量不要把公共控制器写在controller文件夹内。有以下2个方案。

1、使用分层控制器,这些分层控制器是不能够被URL访问直接调用到的。常用的分层命名为event。

2、使用trait引入的形式也是可以的。这是php5.4的新特性。thinkphp5在控制器内使用use直接引入。

以上2个方案具体实现方法,可以直接查阅thinkphp5的手册。有案例介绍。

ThinkPHP 中系统函数有哪些

首先给大家介绍ThinkPHP函数详解:M方法 M方法用于实例化一个基础模型类,和D方法的区别在于: 1、不需要自定义模型类,减少IO加载,性能较好; 2、实例化后只能调用基础模型类(默认是Model类)中的方法; 3、可以在实例化的时候指定表前缀、数据库和数据库的连接信息; D方法的强大则体现在你封装的自定义模型类有多强,不过随着新版ThinkPHP框架的基础模型类的功能越来越强大,M方法也比D方法越来越实用了。 M方法的调用格式: M('[基础模型名:]模型名','数据表前缀','数据库连接信息')我们来看下M方法具体有哪些用法: 1、实例化基础模型(Model)类在没有定义任何模型的时候,我们可以使用下面的方法实例化一个模型类来进行操作://实例化User模型$User= M('User');//执行其他的数据操作$User->select();这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。$User= M('User');其实等效于:$User= new Model('User');表示操作think_user表。M方法和D方法一样也有单例功能,多次调用并不会重复实例化。M方法的模型名参数在转换成数据表的时候会自动转换成小写,也就是说ThinkPHP的数据表命名规范是全小写的格式。 2、实例化其他公共模型类第一种方式实例化因为没有模型类的定义,因此很难封装一些额外的逻辑方法,不过大多数情况下,也许只是需要扩展一些通用的逻辑,那么就可以尝试下面一种方法。$User= M('CommonModel:User');改用法其实等效于:$User= new CommonModel('User');因为系统的模型类都能够自动加载,因此我们不需要在实例化之前手动进行类库导入操作。模型类CommonModel必须继承Model。我们可以在CommonModel类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类,如果你的项目已经有超过100个数据表了,而大多数情况都是一些基本的CURD操作的话,只是个别模型有一些复杂的业务逻辑需要封装,那么第一种方式和第二种方式的结合是一个不错的选择。 3、传入表前缀、数据库和其他信息 M方法有三个参数,第一个参数是模型名称(可以包括基础模型类和数据库),第二个参数用于设置数据表的前缀(留空则取当前项目配置的表前缀),第三个参数用于设置当前使用的数据库连接信息(留空则取当前项目配置的数据库连接信息),例如:$User= M('db2.User','think_');表示实例化Model模型类,并操作db2数据库中的think_user表。如果第二个参数留空或者不传,表示使用当前项目配置中的数据表前缀,如果操作的数据表没有表前缀,那么可以使用:$User= M('db1.User',null);表示实例化Model模型类,并操作db1数据库中的user表。如果你操作的数据库需要不同的用户账号,可以传入数据库的连接信息,例如:$User= M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');表示基础模型类用Model,然后对think_user表进行操作,用user_a账号进行数据库连接,操作数据库是thinkphp。第三个连接信息参数可以使用DSN配置或者数组配置,甚至可以支持配置参数。例如,在项目配置文件中配置了:'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';则可以使用:$User= M('User','think_','DB_CONFIG');基础模型类和数据库可以一起使用,例如:$User= M('CommonModel:db2.User','think_');如果要实例化分层模型的话,利用公共模型类的方式,我们可以使用: M('UserLogic:User');来实例化UserLogic,虽然这样做的意义不大,因为可以用 D('User','Logic');实现同样的功能。 ThinkPHP函数详解:R方法 R方法用于调用某个控制器的操作方法,是A方法的进一步增强和补充。关于A方法的用法见这里。 R方法的调用格式: R('[项目://][分组/]模块/操作','参数','控制器层名称')例如,我们定义了一个操作方法为: class UserAction extends Action{ public function detail($id){ return M('User')->find($id);}}那么就可以通过R方法在其他控制器里面调用这个操作方法(一般R方法用于跨模块调用)$data= R('User/detail',array('5'));表示调用User控制器的detail方法(detail方法必须是public类型),返回值就是查询id为5的一个用户数据。如果你要调用的操作方法是没有任何参数的话,第二个参数则可以留空,直接使用:$data= R('User/detail');也可以支持跨分组和项目调用,例如: R('Admin/User/detail',array('5'));表示调用Admin分组下面的User控制器的detail方法。 R('Admin://User/detail',array('5'));表示调用Admin项目下面的User控制器的detail方法。官方的建议是不要在同一层多太多调用,会引起逻辑的混乱,被公共调用的部分应该封装成单独的接口,可以借助3.1的新特性多层控制器,单独添加一个控制器层用于接口调用,例如,我们增加一个Api控制器层, class UserApi extends Action{ public function detail($id){ return M('User')->find($id);}}然后,使用R方法调用$data= R('User/detail',array('5'),'Api');也就是说,R方法的第三个参数支持指定调用的控制器层。同时,R方法调用操作方法的时候可以支持操作后缀设置C('ACTION_SUFFIX'),如果你设置了操作方法后缀,仍然不需要更改R方法的调用方式。以上内容给大家分享了ThinkPHP函数详解之M方法和R方法,希望对大家有所帮助。

好了,文章到这里就结束啦,如果本次分享的thinkphp5手册和thinkphp运行目录问题对您有所帮助,还望关注下本站哦!

concatenate函数怎么用?excel串联函数delete用法(delete的固定搭配和用法)