📂 模块目录结构
模块目录结构
标准模块结构概览
怪兽框架的模块(addons)采用标准化的目录结构,确保代码组织清晰、逻辑分明。以下是标准模块目录结构:
gs_example/ // 模块根目录
├── assets/ // 静态资源目录(安装后,会自动将里面文件复制到public/assets/addons/gs_example)
├── controller/ // 控制器目录(内部目录不强制命名,以下为参考)
│ ├── admin/ // 后台管理控制器
│ ├── app/ // Uniapp提供Api的控制器
│ ├── h5/ // 前端MVC页面控制器
│ ├── api/ // API接口控制器
│ └── Index.php // 默认控制器(当前目录一般用于Admin入口,访问:域名/gs_example?plaid=1)
├── model/ // 模型目录
├── util/ // 工具类目录(非强制命名,根据个人习惯进行命名)
├── vendor/ // 第三方依赖目录
├── view/ // 视图目录
│ ├── h5/ // 前端视图
│ ├── hook/ // 钩子视图
│ └── index/ // 默认视图
├── common.php // 公共函数文件
├── composer.json // Composer配置文件(支持模块内部使用,系统会自动注册)
├── composer.lock // Composer锁定文件
├── config.php // 模块配置文件
├── install.sql // 安装SQL脚本
├── upgrade.sql // 更新SQL脚本
├── Listen.php // 事件监听类
├── Hook.php // 系统钩子类(待完善)
└── Plugin.php // 模块主类
核心文件详解
Plugin.php
Plugin.php是模块的核心文件,定义了模块的基本信息和生命周期方法。该文件必须继承think\Addons类。 配置项中,$info
Listen.php
Listen.php是事件监听类,继承自hiduoke\event\BaseEvent,主要用于监听和处理系统事件。
namespace addons\gs_example;
use think\facade\Log;
use hiduoke\event\BaseEvent;
use EasyWeChat\Kernel\Messages\Text;
use EasyWeChat\Kernel\Messages\Message;
use hiduoke\services\FormBuilder as Form;
class Listen extends BaseEvent
{
/**
* 平台应用下的配置
* @return array
*/
public function gs_example_platform_addon_config($row)
{
$rule = array();
$rule[] = Form::select('config_option', '配置选项', $row['config_option'] ?? 0)
->options([
['value' => 0, 'label' => "选项一(默认)"],
['value' => 1, 'label' => "选项二"],
['value' => 2, 'label' => '选项三']
])
->effect(['help' => '配置选项说明文本']);
return $rule;
}
// 额外的其他行为事件
}
config.php
config.php定义了模块的配置项,包括权限配置、路由配置和默认URL等,配置应用权限后,当前的平台管理员可以创建子账号,并可给子账号分配权限:
common.php
common.php包含当前模块的公共函数,可以被当前模块的任何部分调用,内部仅限于当前模块调用:
Global.php
Global.php如果在当前文件中写函数,函数会被全局调用。
install&upgrade.sql
install.sql和upgrade.sql包含模块安装时需要执行的SQL语句,用于创建/更新模块所需的数据表,当前推荐使用开发者工具自动创建和比对生成创建/升级sql。
<?php
/*
* 模块公共函数
*/
if (!function_exists('test_function')) {
/**
* 测试函数
* @param array $data 数据
* @return string
*/
function test_function($data = [])
{
return "测试函数";
}
}
目录结构详解
controller/
控制器目录存放模块的控制器类,通常分为以下子目录:
addons/gs_example/controller/
├── admin/ // 后台管理控制器
│ ├── Group.php // 分组管理控制器
│ ├── Order.php // 订单管理控制器
│ └── User.php // 用户管理控制器
├── api/ // API接口控制器
│ └── Index.php // API接口入口
├── h5/ // 前端页面控制器
│ ├── Diy.php // 自定义页面控制器
│ ├── Group.php // 分组页面控制器
│ ├── Order.php // 订单页面控制器
│ └── H5BaseController.php // H5基础控制器
└── Index.php // 默认控制器
model/
模型目录存放模块的数据模型类,负责数据处理和业务逻辑,模型可以使用开发者工具自动创建:
addons/gs_example/model/
├── BaseGsExampleModel.php // 基础模型
├── GsExampleActivity.php // 活动模型
├── GsExampleOrder.php // 订单模型
└── GsExampleUser.php // 用户模型
view/
视图目录存放模块的模板文件,按照控制器类型组织:
addons/gs_example/view/
├── h5/ // 前端视图
│ ├── common/ // 公共视图
│ ├── diy/ // 自定义页面视图
│ ├── group/ // 分组视图
│ ├── layout/ // 布局视图
│ ├── order/ // 订单视图
│ └── project/ // 项目视图
├── hook/ // 钩子视图
└── index/ // 默认视图
assets/
静态资源目录存放模块的CSS、JavaScript、图片等资源文件,系统安装的时候会自动将内容复制一份到public/assets/gs_example/,在开发模块的时候,开发者可以直接将静态资源放到public目录,使用开发者工具打包的时候会自动将public目录打包到模块中。
addons/gs_example/assets/
├── assets/ // 例如后端的打包静态资源
├── images/ // 图片资源
├── style/ // 样式
├── lib/ // 库
└── icon.png // 模块图标
模块依赖管理
模块可以通过composer安装第三方依赖,然后可以就可以直接在当前模块中使用,无需单独引入文件:
注意事项
请确保模块依赖不与系统根目录的依赖发生冲突。在选择依赖包时,应注意以下几点:
- 避免引入与系统核心依赖相同的包的不同版本
- 如果必须使用相同的包,应确保版本兼容性
- 优先使用系统已有的依赖,减少冗余,如果当前需要安装的依赖他自身依赖和系统版本不兼容,自行解决。
- 模块特有的依赖才需要在模块中单独安装
总结
怪兽框架的模块(addons)采用标准化的目录结构,包含核心文件(Plugin.php、Listen.php、config.php等)和功能目录(controller、model、view等)。这种结构使得模块开发更加规范和高效,便于维护和扩展。
开发者在创建新模块时,应当遵循这些目录结构规范,合理组织代码,实现功能的模块化和复用。通过标准化的模块结构,系统实现了高度的可扩展性和定制性,为开发者提供了一种灵活、高效的开发方式。
