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+mysql)
Nov 23 PHP
PHP 数据库树的遍历方法
Feb 06 PHP
为PHP初学者的8点有效建议
Nov 20 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
Zend Framework教程之Zend_Registry对象用法分析
Mar 22 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
tp5.1框架数据库子查询操作实例分析
May 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
php使用百度天气接口示例
2014/04/22 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
Node之简单的前后端交互(实例讲解)
2017/11/14 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
基于Electron实现桌面应用开发代码实例
2020/07/07 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
python实现梯度法 python最速下降法
2020/03/24 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
公司董事长职责
2013/12/12 职场文书
实习推荐信
2014/05/10 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
英语教师求职信范文
2015/03/20 职场文书
小学重阳节活动总结
2015/03/24 职场文书
毕业生政审意见范文
2015/06/04 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript