# discovery **Repository Path**: fiberphp/discovery ## Basic Information - **Project Name**: discovery - **Description**: 🔍 FiberPHP 包发现与安装 —— PackageManifest/PackageInstaller + #[Package] Attribute,零 Workerman 依赖,可独立复用。 - **Primary Language**: PHP - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-02 - **Last Updated**: 2026-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # FiberPHP Discovery FiberPHP 包发现与安装 —— `PackageManifest` / `PackageInstaller` + `#[Package]` Attribute。子包通过 Attribute 声明扩展点,应用侧自动发现并注册。 ## 环境要求 - PHP >= 8.3 - ext-json - `fiberphp/contract` ^0.1.0 - `fiberphp/support` ^0.1.0 ## 安装 ```bash 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` 触发清理 | ## 基本用法 ### 子包声明扩展点 ```php use FiberPHP\Attribute\Package; #[Package( providers: [MyProvider::class], // 注册到容器 + 执行 boot commands: [MyCommand::class], // 控制台命令 middleware: [MyMiddleware::class], // 路由中间件链 aliases: ['my' => MyManager::class], // 类名别名绑定 pathRelation: ['config/process/my.php' => 'config/process/my.php'], // 安装时幂等拷贝的发布文件(进程/命令等保留目录) )] final class MyServiceProvider { } ``` ### 应用侧注册 Composer 钩子 ```json { "scripts": { "post-autoload-dump": "FiberPHP\\Package\\PackageInstaller::discover", "pre-package-uninstall": "FiberPHP\\Package\\PackageInstaller::uninstall" } } ``` 每次 `composer update` / `dump-autoload` 后自动重建 manifest,无需手动在应用配置中声明子包。 ### 读取 manifest ```php use FiberPHP\Package\PackageManifest; $providers = PackageManifest::providers(); // 全部 Provider 类名 $commands = PackageManifest::commands(); // 全部命令类名 $middleware = PackageManifest::middleware(); // 全部中间件 $aliases = PackageManifest::aliases(); // 全部别名绑定 ``` manifest 缓存于 `runtime/cache/packages.php`,`clear()` 可强制重建。 ## License [MIT](LICENSE)