php系统模块设计,模块设计 · ThinkPHP5.1完全开发手册 · 看云

>[info] 5.1版本默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以`app`作为根命名空间(可通过环境变量更改)。

## 目录结构

标准的应用和模块目录结构如下:

~~~cmd

├─application 应用目录(可设置)

│ ├─common 公共模块目录(可选)

│ ├─module1 模块1目录

│ │ ├─common.php 模块函数文件

│ │ ├─config 模块配置目录(可选)

│ │ ├─controller 控制器目录

│ │ ├─model 模型目录(可选)

│ │ ├─view 视图目录(可选)

│ │ └─ ... 更多类库目录

│ │

│ ├─module2 模块2目录

│ │ ├─common.php 模块函数文件

│ │ ├─config 模块配置目录(可选)

│ │ ├─controller 控制器目录

│ │ ├─model 模型目录(可选)

│ │ ├─view 视图目录(可选)

│ │ └─ ... 更多类库目录

~~~

>[info] 模块的配置目录也可以放到外面的config目录的模块子目录下面。

遵循ThinkPHP`5.1`的命名规范,模块目录全部采用**小写和下划线**命名。

>[danger] 模块名称请避免使用PHP保留关键字(保留字列表参见 http://php.net/manual/zh/reserved.keywords.php ),否则会造成系统错误。

其中`common`模块是一个特殊的模块,默认是禁止直接访问的,一般用于放置一些公共的类库用于其他模块的继承。

## 模块类库

一个模块下面的类库文件的命名空间统一以`app\模块名`开头,例如:

~~~

// index模块的Index控制器类

app\index\controller\Index

// index模块的User模型类

app\index\model\User

~~~

## 模块和控制器隐藏

由于默认是采用多模块的支持,所以多个模块的情况下必须在URL地址中标识当前模块,如果只有一个模块的话,可以在入口文件中进行模块绑定:

~~~

// [ 应用入口文件 ]

namespace think;

// 加载基础文件

require __DIR__ . '/../thinkphp/base.php';

// 执行应用并响应(绑定当前访问到index模块)

Container::get('app')->bind('index')->run()->send();

~~~

绑定后,我们的URL访问地址则变成:

>[info] #### http://serverName/index.php/控制器/操作/[参数名/参数值...]

访问的模块是`index`模块。

如果你的应用比较简单,模块和控制器都只有一个,那么可以在应用公共文件中绑定模块和控制器,如下:

~~~php

// 绑定当前访问到index模块的index控制器

Container::get('app')->bind('index/index')->run()->send();

~~~

设置后,我们的URL访问地址则变成:

>[info] #### http://serverName/index.php/操作/[参数名/参数值...]

访问的模块是`index`模块,控制器是`Index`控制器。

## 单一模块

如果你的应用比较简单,只有唯一一个模块,那么可以进一步简化成使用单一模块结构,方法如下:

首先在应用配置文件中定义:

~~~

// 关闭多模块设计

'app_multi_module' => false,

~~~

然后,调整应用目录的结构为如下:

~~~

├─application 应用目录(可设置)

│ ├─controller 控制器目录

│ ├─model 模型目录

│ ├─view 视图目录

│ ├─ ... 更多类库目录

│ └─common.php 函数文件

~~~

URL访问地址变成

>[info] #### http://serverName/index.php(或者其它应用入口)/控制器/操作/[参数名/参数值...]

同时,单一模块设计下的应用类库的命名空间也有所调整,例如:

原来的

~~~

app\index\controller\Index

app\index\model\User

~~~

变成

~~~

app\controller\Index

app\model\User

~~~

更多的URL简化和定制还可以通过URL路由功能实现。

>[danger] 单一模块方式仍然可以通过多级控制器的方式来管理控制器层次

## 空模块

可以把不存在的模块访问统一指向一个空模块,设置:

~~~

// 设置空模块名为home

'empty_module'=>'home',

~~~

如果访问了一个不存在的模块,系统会指向home模块进行访问。

>[danger] 空模块只有开启多模块访问,并且没有绑定模块的情况下才有效。

## 环境变量

5.1版本取消了所有的系统常量,原来的系统路径变量改为使用`Env`类获取(需要引入`think\facade\Env`):

例如:

~~~

// 获取应用目录(不区分大小写)

echo Env::get('app_path');

// 或者

echo Env::get('APP_PATH');

~~~

支持获取的系统路径变量包括:

|系统路径|Env参数名称|

|---|---|

|应用根目录|root_path|

|应用目录|app_path|

|框架目录|think_path|

|配置目录| config_path|

|扩展目录|extend_path |

|composer目录| vendor_path |

|运行缓存目录|runtime_path|

|路由目录| route_path |

|当前模块目录|module_path|

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值