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 09 PHP
php adodb连接不同数据库
Mar 19 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
PHPCMS的使用小结
Sep 20 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
基于MySQL分区性能的详细介绍
May 02 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
浅谈PHP的数据库接口和技术
Dec 09 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
PHP批斗大会之缺失的异常详解
Jul 09 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/12/25 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
php实现三级级联下拉框
2016/04/17 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
结合mint-ui移动端下拉加载实践方法总结
2017/11/08 Javascript
JavaScript原生实现观察者模式的示例
2017/12/15 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
[52:36]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python科学计算包numpy用法实例详解
2018/02/08 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
python绘制封闭多边形教程
2020/02/18 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
python自动化办公操作PPT的实现
2021/02/05 Python
宝信软件JAVA工程师面试经历
2012/08/19 面试题
求职者应聘的自我评价
2013/10/16 职场文书
新闻专业推荐信范文
2013/11/20 职场文书
中专三年学习的个人自我评价
2013/12/12 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
县政府领导班子“四风”方面突出问题整改措施
2014/09/23 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书