psr/cache 是 PSR-6 缓存接口规范,需显式指定版本(如 ^3.0 或 ^2.0),依赖 PHP 8.0+ 或 7.0+,仅提供接口无实现,须搭配 symfony/cache 等具体实现使用。

composer require psr/cache 报错“could not find package”
不是包名写错了,就是你的 Composer 源配置太老或被污染了。psr/cache 是一个接口规范包,没有具体实现,纯 PHP 接口定义,所以它不带版本号后缀(比如 psr/cache:3.0 这种写法是错的),也不在 Packagist 主站以独立“可安装项目”形式存在——它其实是 psr/log 那类“PSR 标准组织托管”的元包,由 composer/packagist 自动映射。
常见错误现象:composer require psr/cache 提示 Could not find package psr/cache 或 Package psr/cache is not found;或者装上了但 vendor/psr/cache 目录为空、没生成 src/CacheInterface.php。
- 确认你用的是较新版本 Composer(
composer --version≥ 2.2),旧版对 PSR 元包支持不完整 - 执行
composer config -g repo.packagist composer https://packagist.org重置全局源(避免被镜像或私有源劫持) - 直接运行
composer require psr/cache:^3.0—— 注意必须带^3.0版本约束,否则 Composer 不知道该拉哪个版本(PSR 包不设默认分支) - 装完检查
vendor/psr/cache/src/CacheInterface.php是否存在,而不是只看目录有没有创建
装完 psr/cache 后,类自动加载失败(Class not found)
装成功 ≠ 能用。PSR 接口本身不提供实现,只是约定签名;Composer 只负责把接口文件放进 vendor 并注册自动加载规则,但如果你的 autoload 配置里没包含 psr-4 映射到 src/,或者用了自定义加载器覆盖了默认行为,就会找不到 PsrCacheCacheInterface。
- 检查
vendor/composer/autoload_psr4.php里是否有类似'Psr\Cache\' => array($vendorDir . '/psr/cache/src')的条目 - 不要手动
require或includeCacheInterface.php,这会绕过 Composer 自动加载,且破坏命名空间一致性 - 如果你项目用了
classmap或files类型 autoload,确保没误删或覆盖 PSR 包的加载逻辑 - 运行
composer dump-autoload -o强制刷新优化后的自动加载映射(尤其在改过 autoload 配置后)
为什么不能直接 new PsrCacheCacheInterface()?
PsrCacheCacheInterface 是接口,不是类。它只定义了 get()、set()、delete() 等方法签名,没有任何实现代码。你必须选一个实现了它的缓存库,比如 symfony/cache、laravel/framework 内置缓存、或轻量级的 cache/simple-cache(注意:后者实现的是 PsrSimpleCacheCacheInterface,和 psr/cache 不兼容)。
- 要真正用缓存,得
composer require symfony/cache,然后use SymfonyComponentCacheAdapterFilesystemAdapter; -
psr/cache的价值在于解耦:你的服务类只依赖PsrCacheCacheInterface,不绑定具体实现,方便测试 Mock 或后期替换底层 - 别混淆
psr/cache(v3,支持延迟加载、TTL 精确控制等)和已废弃的psr/simple-cache(v1,方法更少,无缓存项对象) - 如果你只是想快速跑通一个缓存例子,别卡在接口上——先装
symfony/cache,再用new FilesystemAdapter()实例传给需要CacheInterface的构造函数
PHP 版本与 psr/cache v3 兼容性陷阱
psr/cache:^3.0 要求 PHP ≥ 8.0,不是因为用了新语法,而是其类型声明(如 CacheItemInterface::get(): mixed)依赖 PHP 8.0+ 的 mixed 类型。如果你项目还在用 PHP 7.4,强行装 ^3.0 会导致后续运行时报致命错误,而 Composer 安装阶段不会报错。
- PHP 7.4 项目请明确指定
composer require psr/cache:^2.0(v2 支持 PHP 7.0+,接口基本一致,只是少了mixed和never) - 检查
composer.json中"config": {"platform": {"php": "7.4"}}是否设置正确,否则 Composer 可能按本地 PHP 版本推断,导致装错大版本 - v2 和 v3 的主要差异在返回类型:v2 中
get()返回mixed但没声明,v3 显式声明为mixed;实际使用中只要不开启严格模式(declare(strict_types=1)),多数情况感知不到区别
事情说清了就结束。最常卡住的地方不是命令怎么敲,而是搞混了「接口规范」和「可用实现」——装了 psr/cache 只是拿到了一张合同模板,你还得找人来签。











