加载中...

模块设计


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

目录结构

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

  1. ├─application 应用目录(可设置)
  2. ├─common 公共模块目录(可选)
  3. ├─module1 模块1目录
  4. ├─common.php 模块函数文件
  5. ├─config 模块配置目录(可选)
  6. ├─controller 控制器目录
  7. ├─model 模型目录(可选)
  8. ├─view 视图目录(可选)
  9. └─ ... 更多类库目录
  10. ├─module2 模块2目录
  11. ├─common.php 模块函数文件
  12. ├─config 模块配置目录(可选)
  13. ├─controller 控制器目录
  14. ├─model 模型目录(可选)
  15. ├─view 视图目录(可选)
  16. └─ ... 更多类库目录

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

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

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

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

模块类库

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

  1. // index模块的Index控制器类
  2. app\index\controller\Index
  3. // index模块的User模型类
  4. app\index\model\User

模块和控制器隐藏

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

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

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

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

访问的模块是index模块。

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

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

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

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

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

单一模块

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

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

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

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

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

URL访问地址变成

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

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

原来的

  1. app\index\controller\Index
  2. app\index\model\User

变成

  1. app\controller\Index
  2. app\model\User

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

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

空模块

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

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

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

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

环境变量

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

例如:

  1. // 获取应用目录(不区分大小写)
  2. echo Env::get('app_path');
  3. // 或者
  4. 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

还没有评论.