Skip to content

插件机制功能概览

1. 完整的插件生命周期管理

插件支持五个生命周期钩子,由 Plugin.php 定义:

方法触发时机用途
install()插件首次安装时创建数据库表、初始化数据
uninstall()插件卸载时清理数据库表、删除数据
activate()插件启用时启用时的初始化工作
deactivate()插件禁用时禁用时的清理工作
boot()每次请求加载插件时注册服务、初始化运行时状态

2. 路由扩展能力

插件可以向系统路由表中注入自定义路由,格式与 AppConfig 完全一致:

php
protected array $routes = [
    'public' => [
        ['GET', '/oauth/github/login', [self::class, 'redirectToGitHub']],
        ['GET', '/oauth/github/callback', [self::class, 'handleCallback']],
    ],
    'admin' => [
        ['GET', '/sample-plugin', [self::class, 'adminPage']],
    ],
];

路由会自动合并到对应的路由组(public、admin、user、api),无需修改主程序代码。

3. Hook 事件监听系统

系统级 Hook(SystemHook.php

Hook参数触发时机
Boot-框架启动后、路由分发前
UserRegistereduser用户注册成功后
UserLoggedInuser用户登录成功后
OrderCreatedorder订单创建后
OrderPaidorder订单支付成功后
OrderCancelledorder订单取消后
LicenseCreatedlicense授权创建后
LicenseExpiringlicense授权即将到期时
LicenseExpiredlicense授权到期后
ViewRenderBeforeviewName, data视图渲染前
ViewRenderAfterviewName, html视图渲染后
AdminNavigationnavItems后台侧边栏渲染时
UserNavigationnavItems用户端导航渲染时
UserSettingsSectionuser用户设置页面渲染时

应用级 Hook(AppHook.php

Hook参数触发时机
PiracyRecordVerifiedpiracyRecord盗版线索核验入库后
PiracyRecordClosedpiracyRecord盗版线索关闭后
SupportTicketCreatedticket用户提交工单后
SupportTicketRepliedticket, reply客服回复工单后
CardsGeneratedcards卡密生成后
CardRedeemedcard, license卡密核销后
PaymentChannelschannels(引用传递)注册支付通道时
PaymentCheckoutchannel, order, product支付下单时
PaymentNotifychannel, payload, headers, orderNo支付回调时

短路机制:Hook 处理器返回 false 可阻止后续处理器执行。

4. 插件配置管理

插件可以定义配置项,系统自动生成配置表单并持久化到数据库:

php
protected array $settings = [
    'client_id' => ['type' => 'string', 'label' => 'Client ID', 'default' => ''],
    'auto_create' => ['type' => 'bool', 'label' => '自动创建新用户', 'default' => true],
];

支持的配置类型:stringboolinttextarea

5. 插件依赖管理

支持声明插件间的依赖关系,支持语义化版本约束:

php
protected array $dependencies = [
    'GitHubOAuth' => '^1.0.0',  // 需 >=1.0.0 <2.0.0
    'SomePlugin' => '>=2.0.0',  // 需 >=2.0.0
];

启用插件时自动验证依赖,禁用插件时检查是否有其他插件依赖它。

6. 数据库表前缀保护

插件创建数据库表时,通过 $this->table('table_name') 方法自动添加前缀 plugin_插件名_,避免表名冲突:

php
// GitHubOAuth 插件调用 table('oauth_accounts') 返回
// plugin_GitHubOAuth_oauth_accounts
$t = $this->table('oauth_accounts');

7. 视图扩展能力

通过 ViewRenderBeforeViewRenderAfter Hook,插件可以在特定视图中注入内容。例如 GitHubOAuth 插件在登录页面渲染后自动插入 GitHub 登录按钮。

8. 管理后台集成

后台 /admin/plugins 提供:

  • 插件列表展示(名称、版本、作者、描述、启用状态)
  • 启用/禁用插件操作
  • 插件配置页面(自动根据 $settings 生成表单)
  • 重置配置功能

内置插件示例

SamplePlugin

演示插件机制的基本用法:路由注册、Hook 监听、配置项定义。

GitHubOAuth

提供完整的 GitHub OAuth 登录功能:

  • 登录页面自动注入 GitHub 登录按钮
  • 支持已有账户关联和新用户自动创建
  • 用户设置页面展示第三方账号绑定状态
  • 自定义数据库表存储 OAuth 关联信息
最近更新