📂 模块目录结构

模块目录结构

标准模块结构概览

怪兽框架的模块(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.sqlupgrade.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/

静态资源目录存放模块的CSSJavaScript、图片等资源文件,系统安装的时候会自动将内容复制一份到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等)。这种结构使得模块开发更加规范和高效,便于维护和扩展。

开发者在创建新模块时,应当遵循这些目录结构规范,合理组织代码,实现功能的模块化和复用。通过标准化的模块结构,系统实现了高度的可扩展性和定制性,为开发者提供了一种灵活、高效的开发方式。