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 相关文章推荐
计数器详细设计
Oct 09 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
php 定界符格式引起的错误
May 24 PHP
destoon常用的安全设置概述
Jun 21 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
Jul 29 PHP
PHP函数in_array()使用详解
Aug 20 PHP
修改destoon会员公司的伪静态中的com目录的方法
Aug 21 PHP
php查找字符串出现次数的方法
Dec 01 PHP
php防止用户重复提交表单
Nov 02 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
thinkphp实现分页显示功能
Dec 03 PHP
Laravel中如何增加自定义全局函数详解
May 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来自动调用不同服务器上的flash
2006/10/09 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
php session的锁和并发
2016/01/22 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
Javascript 闭包引起的IE内存泄露分析
2012/05/23 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
vue远程加载sfc组件思路详解
2019/12/25 Javascript
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
python自动化生成IOS的图标
2018/11/13 Python
python的concat等多种用法详解
2018/11/28 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Django JWT Token RestfulAPI用户认证详解
2019/01/23 Python
python实现证件照换底功能
2019/08/20 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
社区食品安全实施方案
2014/03/28 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
党支部先进事迹材料
2014/12/24 职场文书
2015年先进个人自荐书
2015/03/24 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
MySql 缓存查询原理与缓存监控和索引监控介绍
2021/07/02 MySQL
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers