Search by

fiberphp / discovery

fiberphp

🔍 FiberPHP 包发现与安装 —— PackageManifest/PackageInstaller + #[Package] Attribute,零 Workerman 依赖,可独立复用。

Package info

gitee.com/fiberphp/discovery.git

Issues

pkg:composer/fiberphp/discovery

Statistics

Installs: 3

Dependents: 19

Suggesters: 1

dev-master 2026-09-06 03:54 UTC

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-master
  • fiberphp/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\PackageInstallerComposer 钩子: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 运行时依赖其路径助手)

License

MIT