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 将excel导入mysql
Nov 09 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
PHP Switch 语句之学习笔记
Sep 21 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
php比较两个字符串长度的方法
Jul 13 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
Apr 25 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP中->和=>的含义及使用示例解析
Aug 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
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
php双层循环(九九乘法表)
2017/10/23 PHP
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
下拉框select的绑定示例
2014/09/04 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
Python3.x中自定义比较函数
2015/04/24 Python
CentOS下使用yum安装python-pip失败的完美解决方法
2017/08/16 Python
numpy数组拼接简单示例
2017/12/15 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
Python插件机制实现详解
2020/05/04 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
建筑毕业生自我鉴定
2013/10/18 职场文书
大学生优秀的自我评价分享
2013/10/22 职场文书
网络优化专员求职信
2014/05/04 职场文书
护士医德医风自我评价
2014/09/15 职场文书
小学生优秀评语
2014/12/29 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
用Python实现屏幕截图详解
2022/01/22 Python
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android