pub struct AddonAutoload { /* private fields */ }Expand description
插件自动加载器(对齐 PHP spl_autoload_register 回调)
§设计
- 持有插件根目录(对齐 PHP
app()->getRootPath() . 'addons/') - 提供
resolve(class)方法:类名 → 文件路径(不实际加载文件) - 支持 PSR-0 风格的下划线转目录分隔符
Implementations§
Source§impl AddonAutoload
impl AddonAutoload
Sourcepub fn new(addons_path: impl Into<PathBuf>) -> Self
pub fn new(addons_path: impl Into<PathBuf>) -> Self
创建自动加载器
addons_path:插件根目录,对齐 PHPgetAddonsPath()返回的{rootPath}/addons/
Sourcepub fn addons_path(&self) -> &Path
pub fn addons_path(&self) -> &Path
获取插件根目录
Sourcepub fn resolve(&self, class: &str) -> AddonLoaderResult<Option<PathBuf>>
pub fn resolve(&self, class: &str) -> AddonLoaderResult<Option<PathBuf>>
解析类名到文件路径(对齐 PHP spl_autoload_register 回调)
§规则
- 类名必须以
addons\开头(对齐 PHPstrpos($class, $namespace) === 0) - 命名空间分隔符
\转换为目录分隔符/(对齐str_replace('\\', '/', ...)) - 类名中的下划线
_转换为目录分隔符(对齐str_replace('_', '/', $class)) - 拼接
.php后缀 - 检查文件是否存在
§参数
class:完整类名(如addons\operate\Plugin)
§返回
Ok(Some(path)):类映射到文件且文件存在Ok(None):类名不属于addons\命名空间,或文件不存在(让其他 autoloader 处理)Err(_):路径解析失败
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($name, 'controller', $class))
§多级控制器点号分隔
对齐 PHP get_addons_class 中 . 处理:
if (strpos($class, '.') !== false) {
$array = explode('.', $class);
$class = array_pop($array);
$class = Str::studly($class);
$class = implode('\\', $array) . '\\' . $class;
}§示例
resolve_controller("operate", "Order")→addons/operate/controller/Order.phpresolve_controller("operate", "admin.Order")→addons/operate/controller/admin/Order.phpresolve_controller("operate", "admin.sub.Order")→addons/operate/controller/admin/sub/Order.php
Sourcepub fn resolve_plugin(&self, addon: &str) -> AddonLoaderResult<Option<PathBuf>>
pub fn resolve_plugin(&self, addon: &str) -> AddonLoaderResult<Option<PathBuf>>
解析插件入口类(对齐 PHP get_addons_class($name) 默认 type=‘hook’)
§示例
resolve_plugin("operate")→addons/operate/Plugin.php
Sourcepub fn resolve_strict(&self, class: &str) -> AddonLoaderResult<PathBuf>
pub fn resolve_strict(&self, class: &str) -> AddonLoaderResult<PathBuf>
强制解析类名(对齐 PHP get_addons_class 返回字符串而非 bool)
与 resolve 的区别:不检查文件是否存在,直接返回路径
Trait Implementations§
Source§impl Clone for AddonAutoload
impl Clone for AddonAutoload
Source§fn clone(&self) -> AddonAutoload
fn clone(&self) -> AddonAutoload
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for AddonAutoload
impl Debug for AddonAutoload
impl Eq for AddonAutoload
Source§impl PartialEq for AddonAutoload
impl PartialEq for AddonAutoload
impl StructuralPartialEq for AddonAutoload
Auto Trait Implementations§
impl Freeze for AddonAutoload
impl RefUnwindSafe for AddonAutoload
impl Send for AddonAutoload
impl Sync for AddonAutoload
impl Unpin for AddonAutoload
impl UnsafeUnpin for AddonAutoload
impl UnwindSafe for AddonAutoload
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