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完全过滤HTML,JS,CSS等标签
Jan 16 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
php处理json格式数据经典案例总结
May 19 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
PHP实现对数组分页处理实例详解
Feb 07 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
PHP convert_cyr_string()函数讲解
Feb 13 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
PHP 裁剪图片
Mar 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伪静态写法附代码
2008/06/20 PHP
PHP DataGrid 实现代码
2009/08/12 PHP
php不写闭合标签的好处
2014/03/04 PHP
php生出随机字符串
2017/07/06 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
[01:05:59]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
一年级家长会邀请函
2014/01/25 职场文书
英文演讲稿
2014/05/15 职场文书
民生工作实施方案
2014/05/31 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
初中同学会活动方案
2014/08/22 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
公司借条范本
2015/05/25 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
Python实现信息管理系统
2022/06/05 Python