Silverstripe项目部署后出现${var}弃用错误排查求助
问题背景
通过composer create-project silverstripe/installer example完成SilverStripe新项目安装并配置.env后,页面出现以下错误:
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /Applications/MAMP/htdocs/example2/vendor/silverstripe/framework/src/Control/HTTPRequest.php on line 583
Website Error
There has been an error
The website server has not been able to respond to your request
定位到指定文件第583行后,未发现${var}相关语法,需解决该问题。
排查与解决步骤
检查版本兼容性
SilverStripe版本与PHP版本不匹配是常见诱因:- SilverStripe 4.x最高兼容PHP 8.1,PHP 8.2+会触发该弃用警告
- SilverStripe 5.x支持PHP 8.1+,若使用5.x版本,需更新到最新补丁版
执行composer show silverstripe/framework查看当前框架版本,确认是否与PHP版本匹配。
清除缓存文件
SilverStripe生成的缓存文件可能导致行号对应错误:- 删除项目根目录下的
var/cache文件夹 - 重启MAMP的Apache服务,确保缓存完全清除
- 删除项目根目录下的
全局搜索定位${var}语法
用终端在项目根目录执行搜索命令,精准定位所有使用该语法的文件:grep -r "\${" /Applications/MAMP/htdocs/example2/vendor/silverstripe/找到所有包含
${xxx}的代码行,替换为{$xxx}格式。临时降级PHP版本
若使用SilverStripe 4.x,在MAMP中切换到PHP 8.1版本,可直接消除该弃用警告,恢复网站运行。更新SilverStripe框架
执行以下命令更新框架到对应分支的最新补丁版,官方通常已修复这类语法兼容问题:composer update silverstripe/framework --with-all-dependencies
内容的提问来源于stack exchange,提问作者Samuel Oyintey

