PHP 8.0.21升级后TYPO3 Extbase扩展添加新项触发Undefined array key 1警告问题排查
问题分析与解决办法
首先,这个PHP警告的根源是路由增强器配置里的_controller格式不符合Extbase的预期,在PHP 8.0+的严格模式下触发了未定义数组键的警告——而PHP 7.4会静默忽略这种情况,所以升级PHP后问题才显现出来。
触发原因
看你路由配置里的这一段:
- routePath: '/page/{page}' _controller: 'Article' _arguments: page: currentPage
Extbase的ExtbasePluginEnhancer在解析_controller值时,会用::分割控制器名和方法名(比如Article::list会拆成['Article', 'list'])。但你这里只写了'Article',没有指定方法名,拆分后的数组只有1个元素(索引0),而代码在第202行尝试访问索引1的元素,就导致了PHP 8的Undefined array key 1警告。
PHP 7.4对这种未定义数组键的访问会返回null且不抛出警告,但PHP 8.0开始将其提升为警告级别错误,所以升级后问题显现。
解决办法
把这个路由的_controller改成完整的控制器::方法格式,因为这个路由对应列表分页逻辑,应该指向Article::list:
- routePath: '/page/{page}' _controller: 'Article::list' _arguments: page: currentPage
修改后,Extbase解析时会得到完整的控制器和方法名数组,就不会再触发未定义数组键的警告了。
额外检查建议
- 确认所有路由的
_controller都遵循ControllerName::ActionName的格式,避免只写控制器名的情况 - 清理TYPO3的全部缓存(后台「清除缓存」选项),确保新的路由配置生效
内容的提问来源于stack exchange,提问作者180690
相关产品推荐
相关产品推荐

