sz-rust-addons-loader 0.6.3

SZ-Rust addons 加载器:动态加载插件模块,对齐 ThinkPHP addons 机制
Documentation

SZ-Rust Addons Loader — 插件加载器

对标 PHP zzstudio/think-addons 的 Rust 实现,提供插件发现/清单解析/注册/路由解析能力。

PHP 对齐

PHP 模块 Rust 模块 子任务
think\addons\Service loader::AddonLoader 10.1
think\Addons::getInfo() manifest::parse_manifest 10.1
spl_autoload_register(helper.php) autoload::AddonAutoload 10.1
隐式插件状态管理 registry::AddonRegistry 10.2
think\addons\Route::execute route::parse_route 10.3
think\Route::resource resource::build_resource_routes 10.3.5

模块结构

sz-rust-addons-loader/
├── Cargo.toml
└── src/
    ├── lib.rs          # 主入口(重导出)
    ├── error.rs        # 错误类型
    ├── loader.rs       # AddonLoader(对齐 Service.php)
    ├── manifest.rs     # 清单解析(对齐 Addons::getInfo)
    ├── autoload.rs     # 自动加载(对齐 spl_autoload_register)
    ├── registry.rs     # 注册中心(对齐插件状态管理)
    ├── route.rs        # 路由解析(对齐 Route::execute)
    └── resource.rs     # 资源路由注入(对齐 Route::resource)

用法

use sz_rust_addons_loader::loader::AddonLoader;

let loader = AddonLoader::new("/path/to/addons");
let errors = loader.register().unwrap();
// errors 包含解析失败的插件错误(不中断整体扫描)

let route = loader.parse_route("/addons/operate/Order/index").unwrap();
assert_eq!(route.addon, "operate");
assert_eq!(route.controller, "Order");
assert_eq!(route.action, "index");

不支持(与 PHP 差异)

  • 不实际加载 PHP 文件:Rust 无法直接执行 PHP,仅解析 $info 数组
  • 不实现钩子自动扫描:PHP 通过反射收集 Plugin.php 非基类方法作为钩子,Rust 侧需调用方显式注册
  • 不实现 service.ini 容器绑定:Rust 侧无容器概念,由调用方根据需要处理
  • 不实现 _empty 兜底方法:对齐 PHP is_callable([$instance, '_empty']),但需调用方实现