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 相关文章推荐
我的论坛源代码(六)
Oct 09 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
php处理斐波那契数列非递归方法
Feb 04 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
php去除数组中重复数据
Nov 18 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
创建无限极分类树型结构的简单方法
Jun 20 PHP
php通过pecl方式安装扩展的实例讲解
Feb 02 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
php将字符串转换为数组实例讲解
May 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
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
js创建对象的方式总结
2015/01/10 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
Element-ui自定义table表头、修改列标题样式、添加tooltip、:render-header使用
2019/04/11 Javascript
this.$toast() 了解一下?
2019/04/18 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
python中列表元素连接方法join用法实例
2015/04/07 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
利用Python破解斗地主残局详解
2017/06/30 Python
Python实现自动上京东抢手机
2018/02/06 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
中英双版中文教师求职信
2013/10/27 职场文书
签约仪式主持词
2014/03/19 职场文书
地球一小时倡议书
2014/04/15 职场文书
我的梦想演讲稿
2014/04/30 职场文书
贷款担保申请书
2014/05/20 职场文书
重阳节活动总结
2014/08/27 职场文书
学生检讨书
2015/01/27 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书