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数字格式化
Dec 06 PHP
PHP得到某段时间区间的时间戳 php定时任务
Apr 12 PHP
PHP+jQuery实现自动补全功能源码
May 15 PHP
深入解析phpCB批量转换的代码示例
Jun 27 PHP
thinkphp的c方法使用示例
Feb 24 PHP
基于PHP实现的事件机制实例分析
Jun 18 PHP
windows8.1下Apache+Php+MySQL配置步骤
Oct 30 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
PHP echo()函数讲解
Feb 15 PHP
php给数组赋值的实例方法
Sep 26 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
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php header功能的使用
2013/10/28 PHP
用js实现随机返回数组的一个元素
2007/08/13 Javascript
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
Python多进程multiprocessing用法实例分析
2017/08/18 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
sqlalchemy实现时间列自动更新教程
2020/09/02 Python
python中str内置函数用法总结
2020/12/27 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
C#面试问题
2016/07/29 面试题
Linux面试题LINUX系统类
2015/11/25 面试题
会计试用期自我评价
2014/09/19 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL