php-inventory 需手动添加 VCS 仓库并配置 autoload;Class not found 因命名空间/路径不匹配或未执行 dump-autoload;v3 升级需适配 symlink 参数及 PHP 8.1+;Laravel 中须手动绑定服务。

Composer 安装 php-inventory 时提示 “Package not found”
php-inventory 并非 Packagist 官方注册包,直接 composer require php-inventory/php-inventory 会失败。它通常以 GitHub 仓库形式存在,需手动添加仓库源或使用 VCS 方式安装。
- 确认项目根目录下
composer.json中已声明"repositories",例如:"repositories": [ { "type": "vcs", "url": "https://github.com/your-vendor/php-inventory" } ] - 运行
composer require your-vendor/php-inventory:dev-main(注意替换为实际 vendor 名和分支名) - 若该库未设
autoload规则,需在composer.json中补全:"autoload": { "psr-4": { "Inventory\": "src/" } },再执行composer dump-autoload
调用 InventoryManager 类时抛出 Class 'InventoryInventoryManager' not found
这是典型的自动加载失效问题,根源常在于命名空间与文件路径不匹配,或未触发 autoload 重生成。
- 检查
src/InventoryManager.php文件顶部是否声明了namespace Inventory; - 确认该文件位于
src/目录下(与composer.json中"psr-4"配置一致) - 不要手动
require或include类文件——Composer 的 autoloader 会接管,否则易引发重复定义或路径错误 - 运行
composer install或composer update后,务必验证vendor/autoload.php是否被正确引入(通常在项目入口如index.php中)
升级 php-inventory 导致资产扫描逻辑异常
该库的 scan() 方法行为在 v2.x 和 v3.x 间有 breaking change:v3 默认启用递归软链接解析,而旧项目可能依赖旧版“跳过 symlink”的默认行为。
- 查看 CHANGELOG.md 或对比
InventoryScanner::scan()的参数签名变化 - v3+ 版本需显式传参控制 symlink 行为:
$scanner->scan($path, ['follow_symlinks' => false]);
- 若项目中大量使用
new InventoryManager(),建议封装一层适配器,隔离版本差异 - 注意 v3 要求 PHP >= 8.1,升级前检查
composer.json中"php"约束是否兼容
在 Laravel 项目中注入 InventoryService 失败
Laravel 不会自动绑定第三方库的服务类,InventoryService 需手动注册到容器。
立即学习“PHP免费学习笔记(深入)”;
- 在
AppServiceProvider::register()中添加:$this->app->singleton('inventory.scanner', function ($app) { return new InventoryScanner(); }); - 避免在
config/app.php的providers数组里硬编码第三方服务提供者——php-inventory 没有实现ServiceProvider接口 - 若使用 Laravel 10+,可借助 PHP attributes 注册绑定,但前提是库本身支持构造函数注入依赖(检查其
Scanner是否接受Filesystem等实例)
composer show your-vendor/php-inventory 和 var_dump(class_exists('Inventory\Scanner'))。



















