fiberphp / discovery
🔍 FiberPHP 包发现与安装 —— PackageManifest/PackageInstaller + #[Package] Attribute,零 Workerman 依赖,可独立复用。
dev-master
2026-09-06 03:54 UTC
Requires
- php: >=8.3
- ext-json: *
- fiberphp/support: dev-master
Requires (Dev)
- phpunit/phpunit: ^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-09-07 03:10:06 UTC
README
FiberPHP 包发现与安装 —— PackageManifest / PackageInstaller + #[Package] Attribute。子包通过 Attribute 声明扩展点,应用侧自动发现并注册。
PackageInstaller(Composer 钩子场景)可独立运行(findHelper() 自动就绪助手函数);PackageManifest 的运行时调用依赖 framework 提供的路径助手(runtime_path() 等,经 autoload.files 加载),典型消费方 framework 已保证。
环境要求
- PHP >= 8.3
- ext-json
fiberphp/config^dev-masterfiberphp/support^dev-master
安装
composer require fiberphp/discovery
组件
| 组件 | 职责 |
|---|---|
FiberPHP\Attribute\Package | 子包用 #[Package] Attribute 声明扩展点(providers / commands / middleware / aliases / pathRelation) |
FiberPHP\Package\PackageManifest | 扫描 vendor 中全部 #[Package] 声明,构建并缓存 manifest,提供 providers() / commands() / middleware() / aliases() 读取 |
FiberPHP\Package\PackageInstaller | Composer 钩子:post-autoload-dump 触发 discover(重建 manifest),pre-package-uninstall 触发清理 |
基本用法
子包声明扩展点
use FiberPHP\Attribute\Package;
#[Package(
providers: [MyProvider::class], // 注册到容器 + 执行 boot
commands: [MyCommand::class], // 控制台命令
middleware: [MyMiddleware::class], // 路由中间件链
aliases: ['my' => MyManager::class], // 类名别名绑定
pathRelation: ['config/my.php' => 'config/my.php'], // 安装时拷贝的配置文件
)]
final class MyServiceProvider
{
}
应用侧注册 Composer 钩子
{
"scripts": {
"post-autoload-dump": "FiberPHP\\Package\\PackageInstaller::discover",
"pre-package-uninstall": "FiberPHP\\Package\\PackageInstaller::uninstall"
}
}
每次 composer update / dump-autoload 后自动重建 manifest,无需手动在应用配置中声明子包。
读取 manifest
use FiberPHP\Package\PackageManifest;
$providers = PackageManifest::providers(); // 全部 Provider 类名
$commands = PackageManifest::commands(); // 全部命令类名
$middleware = PackageManifest::middleware(); // 全部中间件
$aliases = PackageManifest::aliases(); // 全部别名绑定
manifest 缓存于 runtime/cache/packages.php(基于 runtime_path()),clear() 可强制重建。
依赖关系
fiberphp/support ← 目录工具(Composer 钩子场景由 findHelper() 自动就绪)
↑
fiberphp/discovery ← 本包
↑
fiberphp/framework ← Kernel 启动时消费 manifest(PackageManifest 运行时依赖其路径助手)