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中函数内引用全局变量的方法
Oct 20 PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
PHP中的一些常用函数收集
May 26 PHP
php中preg_match的isU代表什么意思
Oct 01 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
Yii模型操作之criteria查找数据库的方法
Jul 15 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
Jul 23 PHP
thinkPHP5实现的查询数据库并返回json数据实例
Oct 23 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 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
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php中异常处理方法小结
2015/01/09 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
别了 JavaScript中的isXX系列
2012/08/01 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
教你快速搭建Node.Js服务器的方法教程
2017/03/30 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
JS实现打字游戏
2019/12/17 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
Python函数学习笔记
2008/10/07 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python实现列表中最大最小值输出的示例
2019/07/09 Python
numpy 声明空数组详解
2019/12/05 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
特步官方商城:Xtep
2017/03/21 全球购物
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
季度思想汇报
2014/01/01 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
2014年度思想工作总结
2014/11/27 职场文书
2015年元旦主持词结束语
2014/12/14 职场文书
离婚纠纷代理词
2015/05/23 职场文书
旅游投诉信范文
2015/07/02 职场文书
golang 语言中错误处理机制
2021/08/30 Golang
Python matplotlib多个子图绘制整合
2022/04/13 Python