存储驱动扩展
2026/10/26大约 1 分钟
存储驱动扩展(AdapterRegistry)
基座文件存储支持多驱动:内置 local、oss、qiniu、cos、s3。插件可通过 app\basic\AdapterRegistry 注册新驱动,注册后后台上传、存储切换与内置驱动同构使用。
注册驱动
use app\basic\AdapterRegistry;
// 写在 boot(),owner=插件名
AdapterRegistry::register(
'ftp', // 驱动类型标识
MyFtpAdapter::class, // 适配器类(建议继承 Tinywan 适配器 + 补齐统一删除契约)
configResolver: null, // 可选:自定义配置解析闭包;null 走默认
owner: 'am_demo'
);批量注册(一次挂多个):
AdapterRegistry::batchRegister([
'ftp' => ['adapter' => MyFtpAdapter::class, 'owner' => 'am_demo'],
'sftp' => ['adapter' => MySftpAdapter::class, 'resolver' => $fn, 'owner' => 'am_demo'],
]);适配器类建议继承 Tinywan\Storage\Adapter\* 对应基类(基座的 oss/qiniu/cos/s3 就是这么做的:继承 Tinywan 适配器并补齐统一删除契约),上传行为与原生一致。
驱动显示名与凭证表单
不在注册表里维护
AdapterRegistry 只登记"类型 => 适配器类"。驱动在下拉里的显示名和凭证配置表单,统一走配置管理体系:声明一个 app_name='storage'、code=驱动类型 的配置组(install.sql 或 PluginRegistrar::configSchema)。后台存储弹窗的下拉和动态表单即由这些配置组驱动,不需要第二套元数据。
也就是说,新增一个驱动要动两处:boot() 里 register() 登记适配器类;再用配置体系声明该驱动的凭证表单字段。
判定与清理
| 方法 | 作用 |
|---|---|
has($type) / all() | 是否已注册 / 列出全部 |
getAdapterClass($type) | 取适配器类名 |
owner($type) | 取驱动归属(内置返回空串) |
forgetByOwner($owner) | 禁用/卸载时清自定义驱动(内置不会被清) |
进程级
register() 一律写在 boot(),传 owner。详见生命周期。
