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 相关文章推荐
基于mysql的论坛(6)
Oct 09 PHP
echo(),print(),print_r()之间的区别?
Nov 19 PHP
PHP foreach循环使用详解与实例代码
May 08 PHP
php处理文件的小例子(解压缩,删除目录)
Feb 03 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
php计算整个目录大小的方法
Jun 01 PHP
基于thinkPHP框架实现留言板的方法
Oct 17 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
php上传excel表格并获取数据
Apr 27 PHP
php微信公众号开发之现金红包
Apr 16 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
Oct 21 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
May 02 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开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
PHP 配置后台登录以及模板引入
2017/01/24 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
Bootstrap每天必学之级联下拉菜单
2016/03/27 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
通过源码分析Python中的切片赋值
2017/05/08 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
用Python写王者荣耀刷金币脚本
2017/12/21 Python
用python求一个数组的和与平均值的实现方法
2019/06/29 Python
python生成器用法实例详解
2019/11/22 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
后勤人员自我评价怎么写
2013/09/19 职场文书
实用求职信范文分享
2013/12/25 职场文书
《绿色蝈蝈》教学反思
2014/03/02 职场文书
广播体操比赛口号
2014/06/10 职场文书
临时工聘用合同协议书
2014/10/29 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL