TYPO3 10构造函数注入cacheManager时报Frontend类不存在如何解决
TYPO3 10缓存注入报错解决方案
报错 Class TYPO3\CMS\Core\Cache\Frontend\Frontend does not exist. Reflection failed. 由2个核心配置错误导致,按以下步骤修改即可解决:
1. 修正Services.yaml配置
原配置中给缓存服务指定class为接口FrontendInterface不符合Symfony依赖注入规范,DI解析时会自动尝试查找同命名空间下的Frontend实现类,而该类本身不存在。
修改EXT:my_ext/Configuration/Services.yaml内容如下:
services: cache.my_ext: factory: ['@TYPO3\CMS\Core\Cache\CacheManager', 'getCache'] arguments: ['my_ext'] autowire: false public: false MyVendor\MyExt\Connection\Http: arguments: $cache: '@cache.my_ext'
如果你开启了全局自动装配,也可以给cache.my_ext添加别名实现批量注入,无需单独给每个服务指定参数。
2. 补全Http类的命名空间导入
原代码中直接使用FrontendInterface作为参数类型,但未显式导入对应的命名空间,PHP反射识别类型时会指向错误的类路径。
在EXT:my_ext/Classes/Connection/Http.php的顶部添加use语句:
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
3. 注册缓存配置(可选但必填)
如果没有提前注册my_ext缓存的配置,调用getCache时会返回默认缓存实例,不符合自定义缓存的使用预期。在EXT:my_ext/ext_localconf.php中添加配置:
if (!isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['my_ext'])) { $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['my_ext'] = [ 'frontend' => \TYPO3\CMS\Core\Cache\Frontend\VariableFrontend::class, 'backend' => \TYPO3\CMS\Core\Cache\Backend\FileBackend::class, 'options' => [ 'defaultLifetime' => 36000, ], 'groups' => ['all'], ]; }
最后验证
所有修改完成后,清空TYPO3全站缓存(包括依赖注入的编译缓存),刷新页面即可恢复正常。
内容的提问来源于stack exchange,提问作者axelp
相关产品推荐
相关产品推荐

