Skip to main content

AddonLoader

Struct AddonLoader 

Source
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

Source

pub fn new(addons_path: impl Into<PathBuf>) -> Self

创建加载器

  • addons_path:插件根目录,对齐 PHP {rootPath}/addons/
Source

pub fn addons_path(&self) -> &Path

获取插件根目录

Source

pub fn registry(&self) -> &AddonRegistry

获取注册中心引用(共享只读)

Source

pub fn autoload(&self) -> &AddonAutoload

获取自动加载器引用

Source

pub fn register(&self) -> AddonLoaderResult<Vec<AddonLoaderError>>

注册所有插件(对齐 PHP Service::register() 完整流程)

§流程
  1. 扫描 addons_path 下所有子目录(对齐 PHP scandir
  2. 对每个子目录解析 Plugin.php 清单(对齐 PHP autoload()
  3. 注册到 registry(对齐 PHP get_addons_instance 缓存)
  4. 不加载钩子和服务绑定(Rust 侧无 PHP 反射能力,钩子由调用方显式注册)
§错误处理
  • 单个插件解析失败不会中断整体扫描
  • 返回的 Vec<AddonLoaderError> 包含所有失败的插件错误
  • 目录读取失败返回 ScanDir 错误
Source

pub fn parse_route(&self, url: &str) -> AddonLoaderResult<AddonRoute>

解析路由(对齐 PHP Route::execute($addon, $controller, $action)

§错误
  • RouteParse:URL 格式错误
  • AddonNotFound:插件不存在
  • AddonDisabled:插件已禁用
  • ControllerNotFound:控制器不存在
Source

pub fn names(&self) -> Vec<String>

获取所有已注册插件名(按字母序)

Source

pub fn all_addons(&self) -> Vec<AddonManifest>

获取所有已注册插件清单(按字母序)

Source

pub fn enabled_addons(&self) -> Vec<AddonManifest>

获取所有启用的插件清单(按字母序)

Source

pub fn disabled_addons(&self) -> Vec<AddonManifest>

获取所有禁用的插件清单(按字母序)

Source

pub fn exists(&self, name: &str) -> bool

判断插件是否存在

Source

pub fn is_enabled(&self, name: &str) -> AddonLoaderResult<bool>

判断插件是否启用

Source

pub fn get_manifest(&self, name: &str) -> AddonLoaderResult<AddonManifest>

获取插件清单

Source

pub fn count(&self) -> usize

获取已注册插件数量

Source

pub fn resolve_class(&self, class: &str) -> AddonLoaderResult<Option<PathBuf>>

解析类名到文件路径(对齐 PHP spl_autoload_register 回调)

Source

pub fn resolve_controller( &self, addon: &str, controller: &str, ) -> AddonLoaderResult<Option<PathBuf>>

解析控制器类名到文件路径(对齐 PHP get_addons_class + class_exists

Source

pub fn resolve_plugin(&self, addon: &str) -> AddonLoaderResult<Option<PathBuf>>

解析插件入口类到文件路径

Trait Implementations§

Source§

impl Debug for AddonLoader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more