ThinkPHP 模块


ThinkPHP 采用多模块的架构,支持单一模块设计,模块的命名空间以app作为根命名空间(可通过环境变量更改)。

目录结构

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

├─application           应用目录(可设置)
│  ├─common             公共模块目录(可选)
│  ├─module1            模块1目录
│  │  ├─common.php      模块函数文件
│  │  ├─config      模块配置目录(可选)
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录(可选)
│  │  ├─view            视图目录(可选)
│  │  └─ ...            更多类库目录
│  │ 
│  ├─module2            模块2目录
│  │  ├─common.php      模块函数文件
│  │  ├─config      模块配置目录(可选)
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录(可选)
│  │  ├─view            视图目录(可选)
│  │  └─ ...            更多类库目录

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

遵循ThinkPHP5.1的命名规范 模块目录全部采用小写和下划线命名。

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

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

模块类库

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

// index模块的Index控制器类
appindexcontrollerIndex// index模块的User模型类
appindexmodelUser

模块和控制器隐藏

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

<?php// [ 应用入口文件 ]namespace think;// 加载基础文件require __DIR__ . '/../thinkphp/base.php';// 执行应用并响应(绑定当前访问到index模块)Container::get('app')->bind('index')->run()->send();

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

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

访问的模块是index模块。

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

// 绑定当前访问到index模块的index控制器Container::get('app')->bind('index/index')->run()->send();

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

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

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

单一模块

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

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

// 关闭多模块设计'app_multi_module'  =>  false,

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

├─application        应用目录(可设置)
│  ├─controller      控制器目录
│  ├─model           模型目录
│  ├─view            视图目录
│  ├─ ...            更多类库目录
│  └─common.php      函数文件

URL访问地址变成

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

单一模块设计下的应用类库的命名空间也有所调整

原来的

appindexcontrollerIndex
appindexmodelUser

变成

appcontrollerIndex
appmodelUser

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

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

空模块

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

// 设置空模块名为home'empty_module'=>'home',

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

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

环境变量

ThinkPHP  5.1 系统常量用Env类获取(需要引入thinkfacadeEnv):

// 获取应用目录(不区分大小写)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