TYPO3线上服务器pid类型错误:需int却传入string
TYPO3线上部署类型错误(pid为string而非int)解决方法
问题核心
本地Ddev开发无异常,线上服务器出现两个扩展的类型错误:
BK2K\BootstrapPackage\DataProcessing\ContainerContextProcessor::getPageRecords()第2个参数$pid需为int,传入了stringFriendsOfTYPO3\TtAddress\Hooks\Tca\Label::getConfiguration()同类pid类型错误
停用内容元素后页面正常,手动转int可修复,但本地调试pid无输出、服务器端调试有效。
解决方案
1. 对齐PHP版本与类型检查模式
- 检查线上PHP版本,确保和本地Ddev环境一致;若线上用PHP 8.0+,本地也升级到对应版本,提前发现类型问题
- 查看TYPO3配置
$GLOBALS['TYPO3_CONF_VARS']['SYS']['intvalStrict']:线上可能开启了严格模式,可临时在LocalConfiguration.php中设置'intvalStrict' => false,但建议后续从源头修复
2. 校验数据库表结构与数据
- 对比本地与线上数据库中涉及pid的表(如
pages、tt_content、tt_address),确保pid字段为int类型,避免数据导入时被转为字符串 - 检查线上数据库中pid字段的实际值,是否存在非数字字符串的异常数据
3. 升级兼容的扩展版本
确认BootstrapPackage和tt_address扩展版本与线上TYPO3版本、PHP版本兼容,旧版本可能未适配高版本PHP的严格类型声明,更新到官方最新兼容版本
4. 修复pid传递的类型转换
找到pid被转为字符串的传递路径,在调用相关方法前强制转换为int:
- 例如在调用
ContainerContextProcessor::getPageRecords()时,将参数改为(int)$pid - 若扩展代码存在问题,可提交issue到对应扩展的仓库,或临时修改扩展代码(注意后续升级时的覆盖风险)
内容的提问来源于stack exchange,提问作者mylismyli
相关产品推荐
相关产品推荐

