PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了thinkphp 模块化设计大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

一个完整的ThinkPHP应用基于模块/控制器/操作设计,并且,如果有需要的话,可以支持多入口文件和多级控制器。

ThinkPHP3.2采用模块化的架构设计思想,对目录结构规范做了调整,可以支持多模块应用的创建,让应用的扩展更加方便。

一个典型的URL访问规则是(我们以认的PATHINFO模式为例说明,当然也可以支持普通的URL模式):

  1. http://serverName/index.PHP(或者其他应用入口文件)/模块/控制器/操作/[参数名/参数值...]

ThinkPHP3.2的应用可以支持切换到命令行访问,如果切换到命令行模式下面的访问规则是:

  1. >PHP.exe index.PHP(或其它应用入口文件) 模块/控制器/操作/[参数名/参数值...]

解释下其中的几个概念:

名称描述
应用 基于同一个入口文件访问的项目我们称之为一个应用。
模块 一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录。
控制器 每个模块可以包含多个控制器,一个控制器通常体现为一个控制器类。
操作 每个控制器类可以包含多个操作方法,也可能是绑定的某个操作类,每个操作是URL访问的最小单元。

 

模块设计

新版采用模块化的设计架构,下面是一个应用目录下面的模块目录结构,每个模块可以方便的卸载和部署,并且支持公共模块。

  1. Application 认应用目录(可以设置)
  2. ├─Common 公共模块(不能直接访问)
  3. ├─Home 前台模块
  4. ├─Admin 后台模块
  5. ├─... 其他更多模块
  6. ├─Runtime 认运行时目录(可以设置)

每个模块是相对独立的,其目录结构如下:

  1. ├─Module 模块目录
  2. │ ├─Conf 配置文件目录
  3. │ ├─Common 公共函数目录
  4. │ ├─Controller 控制器目录
  5. │ ├─Model 模型目录
  6. │ ├─Logic 逻辑目录(可选)
  7. │ ├─Service Service目录(可选)
  8. │ ... 更多分层目录可选
  9. │ └─View 视图目录

公共模块

Common模块是一个特殊的模块,是应用的公共模块,访问所有的模块之前都会首先加载公共模块下面的配置文件Conf/config.PHP)和公共函数文件Common/function.PHP)。但Common模块本身不能通过URL直接访问,公共模块的其他文件则可以被其他模块继承或者调用

公共模块的位置可以通过COMMON_PATH常量改变,我们可以在入口文件中重新定义COMMON_PATH如下:

  1. define('COMMON_PATH','./Common/');
  2. define('APP_PATH','./Application/');
  3. require './ThinkPHP/ThinkPHP.PHP';

其应用目录结构变成:

  1. www WEB部署目录(或者子目录)
  2. ├─index.PHP 入口文件
  3. ├─README.md README文件
  4. ├─Common 应用公共模块目录
  5. ├─Application 应用模块目录
  6. ├─Public 应用资源文件目录
  7. └─ThinkPHP 框架目录

自动生成模块目录

3.2.2版本开始,可以支持自动生成认模块之外的模块目录以及批量生成控制器和模型类。

例如,如果我们需要生成一个Admin模块用于后台应用,在应用入口文件中定义如下:

  1. // 绑定Admin模块到当前入口文件
  2. define('BIND_MODULE','Admin');
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.PHP';

然后访问URL地址

  1. http://serverName/index.PHP

就会生成Admin模块的目录,并生成一个认的控制器类Admin\Controller\IndexController。 如果需要生成更多的控制器类,可以定义BUILD_CONTROLLER_LIST常量,例如:

  1. // 绑定Admin模块到当前入口文件
  2. define('BIND_MODULE','Admin');
  3. define('BUILD_CONTROLLER_LIST','Index,User,Menu');
  4. define('APP_PATH','./Application/');
  5. require './ThinkPHP/ThinkPHP.PHP';

访问后会自动生成三个指定的控制器类:

  1. Admin\Controller\IndexController
  2. Admin\Controller\UserController
  3. Admin\Controller\MenuController

还可以自己手动调用Think\Build类的方法生成控制器类,例如:

  1. // 生成Admin模块的Role控制器类
  2. // 认类库为Admin\Controller\RoleController
  3. // 如果已经存在则不会重新生成
  4. \Think\Build::buildController('Admin','Role');

同样,也可以定义BUILD_MODEL_LIST支持生成多个模型类:

  1. // 绑定Admin模块到当前入口文件
  2. define('BIND_MODULE','Admin');
  3. define('BUILD_CONTROLLER_LIST','Index,User,Menu');
  4. define('BUILD_MODEL_LIST','User,Menu');
  5. define('APP_PATH','./Application/');
  6. require './ThinkPHP/ThinkPHP.PHP';

访问会自动生成模型类:

  1. Admin\Model\UserModel
  2. Admin\Model\MenuModel

也可以自己手动调用Think\Build类的方法生成模型类,例如:

  1. // 生成Admin模块的Role模型类
  2. // 认类库为Admin\Model\RoleModel
  3. // 如果已经存在则不会重新生成
  4. \Think\Build::buildModel('Admin','Role');

禁止访问模块

3.2对模块的访问是自动判断的,所以通常情况下无需配置模块列表即可访问,但可以配置禁止访问的模块列表(用于被其他模块调用或者不开放访问),认配置中是禁止访问Common模块和Runtime模块(Runtime目录是认的运行时目录),我们可以增加其他的禁止访问模块列表:

  1. // 设置禁止访问的模块列表
  2. 'MODULE_DENY_LIST' => array('Common','Runtime','Api'),

设置后,Api模块不能通过URL直接访问,事实上,可能我们只是在该模块下面放置一些公共的接口文件,因此都是内部调用即可。

设置访问列表

如果你的应用下面模块比较少,还可以设置允许访问列表和认模块,这样可以简化认模块的URL访问。

  1. 'MODULE_ALLOW_LIST' => array('Home','Admin','User'),
  2. 'DEFAULT_MODULE' => 'Home',

设置之后,除了Home、Admin和User模块之外的模块都不能被直接访问,并且Home模块是认访问模块(可以不出现在URL地址)。

单模块设计

如果你的应用够简单,那么也许仅仅用一个模块就可以完成,那么可以直接设置:

  1. // 关闭多模块访问
  2. 'MULTI_MODULE' => false,
  3. 'DEFAULT_MODULE' => 'Home',

一旦关闭多模块访问后,就只能访问认模块(这里设置的是Home)。

多入口设计

可以给相同的应用及模块设置多个入口,不同的入口文件可以设置不同的应用模式或者绑定模块。

例如,我们在index.PHP文件的同级目录新增一个home.PHP入口文件,并绑定Home模块:

3.2.0版本写法:

  1. // 绑定Home模块到当前入口文件
  2. $_GET['m'] = 'Home';
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.PHP';

3.2.1以上版本写法:

  1. // 绑定Home模块到当前入口文件
  2. define('BIND_MODULE','Home');
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.PHP';

绑定模块后,原来的访问地址

  1. http://serverName/index.PHP/Home/Index/index

就变成

  1. http://serverName/home.PHP/Index/index

同样的方式,我们也可以在入口文件中绑定控制器,例如:

3.2.0版本写法:

  1. $_GET['m'] = 'Home'; // 绑定Home模块到当前入口文件
  2. $_GET['c'] = 'Index'; // 绑定Index控制器到当前入口文件
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.PHP';

3.2.1以上版本写法:

  1. define('BIND_MODULE', 'Home'); // 绑定Home模块到当前入口文件
  2. define('BIND_CONTROLLER','Index'); // 绑定Index控制器到当前入口文件
  3. define('APP_PATH','./Application/');
  4. require './ThinkPHP/ThinkPHP.PHP';

绑定模块和控制器后,原来的访问地址:

  1. http://serverName/index.PHP/Home/Index/index

就变成:

  1. http://serverName/home.PHP/index

大佬总结

以上是大佬教程为你收集整理的thinkphp 模块化设计全部内容,希望文章能够帮你解决thinkphp 模块化设计所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: