thinkPHP5.0框架模块设计详解


Posted in PHP onMarch 18, 2017

本文实例讲述了thinkPHP5.0框架模块设计。分享给大家供大家参考,具体如下:

5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改)。

目录结构

标准的应用和模块目录结构如下:

├─application           应用目录(可设置)
│  ├─common             公共模块目录(可选)
│  ├─common.php         公共函数文件
│  ├─route.php          路由配置文件
│  ├─database.php       数据库配置文件
│  ├─config.php         应用配置文件
│  ├─module1            模块1目录
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录
│  │
│  ├─module2            模块2目录
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录

遵循ThinkPHP5.0的命名规范,模块目录全部采用小写和下划线命名。

模块名称请避免使用PHP保留关键字(保留字列表参见 http://php.net/manual/zh/reserved.keywords.php ),否则会造成系统错误。

其中common模块是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类库用于其他模块的继承。

模块类库

一个模块下面的类库文件的命名空间统一以app\模块名开头,例如:

// index模块的Index控制器类
app\index\controller\Index
// index模块的User模型类
app\index\model\User

其中app可以通过定义的方式更改,例如我们在应用配置文件中修改:

'app_namespace' => 'application',

那么,index模块的类库命名空间则变成:

// index模块的Index控制器类
application\index\controller\Index
// index模块的User模型类
application\index\model\User

更多的关于类库和命名空间的关系可以参考下一前面一篇《thinkPHP5.0框架命名空间详解》。

模块和控制器隐藏

由于默认是采用多模块的支持,所以多个模块的情况下必须在URL地址中标识当前模块,如果只有一个模块的话,可以进行模块绑定,方法是应用的公共文件中添加如下代码:

// 绑定当前访问到index模块
\think\Route::bind('index');

绑定后,我们的URL访问地址则变成:

http://serverName/index.php/控制器/操作/[参数名/参数值...]

访问的模块是index模块。

如果你的应用比较简单,模块和控制器都只有一个,那么可以在应用公共文件中绑定模块和控制器,如下:

// 绑定当前访问到index模块的index控制器
\think\Route::bind('index/index');

设置后,我们的URL访问地址则变成:

http://serverName/应用入口/操作/[参数名/参数值...]

访问的模块是index模块,控制器是Index控制器。

单一模块

如果你的应用比较简单,只有唯一一个模块,那么可以进一步简化成使用单一模块结构,方法如下:

首先在应用配置文件中定义:

// 关闭多模块设计
'app_multi_module' => false,

然后,调整应用目录的结构为如下:

├─application        应用目录(可设置)
│  ├─controller      控制器目录
│  ├─model           模型目录
│  ├─view            视图目录
│  ├─ ...            更多类库目录
│  ├─common.php      函数文件
│  ├─route.php       路由配置文件
│  ├─database.php    数据库配置文件
│  └─config.php      配置文件

URL访问地址变成

http://serverName/index.php(或者其它应用入口)/控制器/操作/[参数名/参数值...]

同时,单一模块设计下的应用类库的命名空间也有所调整,例如:

原来的

app\index\controller\Index
app\index\model\User

变成

app\controller\Index
app\model\User

更多的URL简化和定制还可以通过URL路由功能实现。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP DataGrid 实现代码
Aug 12 PHP
劣质的PHP代码简化
Feb 08 PHP
PHP实现根据浏览器跳转不同语言页面代码
Aug 02 PHP
PHP基本语法总结
Sep 06 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
又十个超级有用的PHP代码片段
Sep 24 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
Jan 05 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
简单实现PHP留言板功能
Dec 21 PHP
php取出数组单个值的方法
Mar 12 PHP
PHP面向对象程序设计重载(overloading)操作详解
Jun 13 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
thinkPHP5.0框架命名空间详解
Mar 18 #PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 #PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 #PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 #PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 #PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
Mar 17 #PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 #PHP
You might like
Linux下进行MYSQL编程时插入中文乱码的解决方案
2007/03/15 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
PHP文件操作方法汇总
2015/07/01 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
Javascript调用C#代码
2011/01/17 Javascript
对jQuery的事件绑定的一些思考(补充)
2013/04/20 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
使用Python下的XSLT API进行web开发的简单教程
2015/04/15 Python
Python列表切片用法示例
2017/04/19 Python
pandas对指定列进行填充的方法
2018/04/11 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
python pandas模块基础学习详解
2019/07/03 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
社会学专业求职信
2014/02/24 职场文书
高中生操行评语大全
2014/04/25 职场文书
见习期个人总结
2015/03/05 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
人身损害赔偿协议书
2016/03/22 职场文书