模块设计

最后更新于:2022-04-01 21:18:09

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 视图目录(可选) │ │ └─ ... 更多类库目录 ~~~ 遵循ThinkPHP`5.0`的命名规范,模块目录全部采用**小写和下划线**命名。 >[danger] 模块名称请避免使用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 ~~~ 更多的关于类库和命名空间的关系可以参考下一章节:命名空间。 ## 模块和控制器隐藏 由于默认是采用多模块的支持,所以多个模块的情况下必须在URL地址中标识当前模块,如果只有一个模块的话,可以进行模块绑定,方法是应用的入口文件中添加如下代码: ~~~ // 绑定当前访问到index模块 define('BIND_MODULE','index'); ~~~ 绑定后,我们的URL访问地址则变成: >[info] #### http://serverName/index.php/控制器/操作/[参数名/参数值...] 访问的模块是`index`模块。 如果你的应用比较简单,模块和控制器都只有一个,那么可以在应用公共文件中绑定模块和控制器,如下: ~~~ // 绑定当前访问到index模块的index控制器 define('BIND_MODULE','index/index'); ~~~ 设置后,我们的URL访问地址则变成: >[info] #### http://serverName/index.php/操作/[参数名/参数值...] 访问的模块是`index`模块,控制器是`Index`控制器。 ## 单一模块 如果你的应用比较简单,只有唯一一个模块,那么可以进一步简化成使用单一模块结构,方法如下: 首先在应用配置文件中定义: ~~~ // 关闭多模块设计 'app_multi_module' => false, ~~~ 然后,调整应用目录的结构为如下: ~~~ ├─application 应用目录(可设置) │ ├─controller 控制器目录 │ ├─model 模型目录 │ ├─view 视图目录 │ ├─ ... 更多类库目录 │ ├─common.php 函数文件 │ ├─route.php 路由配置文件 │ ├─database.php 数据库配置文件 │ └─config.php 配置文件 ~~~ URL访问地址变成 >[info] #### http://serverName/index.php(或者其它应用入口)/控制器/操作/[参数名/参数值...] 同时,单一模块设计下的应用类库的命名空间也有所调整,例如: 原来的 ~~~ app\index\controller\Index app\index\model\User ~~~ 变成 ~~~ app\controller\Index app\model\User ~~~ 更多的URL简化和定制还可以通过URL路由功能实现。
';