pub struct AddonLoader { /* private fields */ }Expand description
插件加载器(主入口)
对齐 PHP think\addons\Service,统一管理插件发现/清单/注册/路由解析。
§设计
- 持有插件根目录(对齐 PHP
$this->addons_path) - 持有
AddonRegistry(插件清单注册中心) - 持有
AddonAutoload(类名→文件路径解析) - 提供
register()入口:扫描目录 + 解析清单 + 注册到 registry - 提供
parse_route(url)入口:URL → 控制器类名 + 文件路径
§用法
ⓘ
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");Implementations§
Source§impl AddonLoader
impl AddonLoader
Sourcepub fn new(addons_path: impl Into<PathBuf>) -> Self
pub fn new(addons_path: impl Into<PathBuf>) -> Self
创建加载器
addons_path:插件根目录,对齐 PHP{rootPath}/addons/
Sourcepub fn addons_path(&self) -> &Path
pub fn addons_path(&self) -> &Path
获取插件根目录
Sourcepub fn registry(&self) -> &AddonRegistry
pub fn registry(&self) -> &AddonRegistry
获取注册中心引用(共享只读)
Sourcepub fn autoload(&self) -> &AddonAutoload
pub fn autoload(&self) -> &AddonAutoload
获取自动加载器引用
Sourcepub fn register(&self) -> AddonLoaderResult<Vec<AddonLoaderError>>
pub fn register(&self) -> AddonLoaderResult<Vec<AddonLoaderError>>
Sourcepub fn parse_route(&self, url: &str) -> AddonLoaderResult<AddonRoute>
pub fn parse_route(&self, url: &str) -> AddonLoaderResult<AddonRoute>
解析路由(对齐 PHP Route::execute($addon, $controller, $action))
§错误
RouteParse:URL 格式错误AddonNotFound:插件不存在AddonDisabled:插件已禁用ControllerNotFound:控制器不存在
Sourcepub fn all_addons(&self) -> Vec<AddonManifest>
pub fn all_addons(&self) -> Vec<AddonManifest>
获取所有已注册插件清单(按字母序)
Sourcepub fn enabled_addons(&self) -> Vec<AddonManifest>
pub fn enabled_addons(&self) -> Vec<AddonManifest>
获取所有启用的插件清单(按字母序)
Sourcepub fn disabled_addons(&self) -> Vec<AddonManifest>
pub fn disabled_addons(&self) -> Vec<AddonManifest>
获取所有禁用的插件清单(按字母序)
Sourcepub fn is_enabled(&self, name: &str) -> AddonLoaderResult<bool>
pub fn is_enabled(&self, name: &str) -> AddonLoaderResult<bool>
判断插件是否启用
Sourcepub fn get_manifest(&self, name: &str) -> AddonLoaderResult<AddonManifest>
pub fn get_manifest(&self, name: &str) -> AddonLoaderResult<AddonManifest>
获取插件清单
Sourcepub fn resolve_class(&self, class: &str) -> AddonLoaderResult<Option<PathBuf>>
pub fn resolve_class(&self, class: &str) -> AddonLoaderResult<Option<PathBuf>>
解析类名到文件路径(对齐 PHP spl_autoload_register 回调)
Sourcepub fn resolve_controller(
&self,
addon: &str,
controller: &str,
) -> AddonLoaderResult<Option<PathBuf>>
pub fn resolve_controller( &self, addon: &str, controller: &str, ) -> AddonLoaderResult<Option<PathBuf>>
解析控制器类名到文件路径(对齐 PHP get_addons_class + class_exists)
Sourcepub fn resolve_plugin(&self, addon: &str) -> AddonLoaderResult<Option<PathBuf>>
pub fn resolve_plugin(&self, addon: &str) -> AddonLoaderResult<Option<PathBuf>>
解析插件入口类到文件路径
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for AddonLoader
impl !UnwindSafe for AddonLoader
impl Freeze for AddonLoader
impl Send for AddonLoader
impl Sync for AddonLoader
impl Unpin for AddonLoader
impl UnsafeUnpin for AddonLoader
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more