如何在Laravel中禁用Deprecated(废弃)消息提示及日志
报错信息
Deprecated: Carbon\Traits\Date :: getDaysFromStartOfWeek(): Implicitly marking parameter $weekStartsAt as nullable is deprecated, the explicit nullable type must be used instead in
C:\laragon\www\laravel-c45\vendor\nesbot\carbon\src\Carbon\Traits\Date.php on line 1394Deprecated: Carbon\Traits\Date :: setDaysFromStartOfWeek(): Implicitly marking parameter $weekStartsAt as nullable is deprecated, the explicit nullable type must be used instead in
C:\laragon\www\laravel-c45\vendor\nesbot\carbon\src\Carbon\Traits\Date.php on line 1412Deprecated: Carbon\Traits\Date :: utcOffset(): Implicitly marking parameter $minuteOffset as nullable is deprecated, the explicit nullable type must be used instead in C:\laragon\www\laravel-c45\vendor\nesbot\carbon\src\Carbon\Traits\Date.php on line 1481
...
这些错误是PHP版本升级后,旧版Carbon代码不符合PHP新类型声明规范导致的,以下是几种可行解决方法:
1. 调整Laravel日志级别
- 打开项目根目录的
.env文件,修改配置:
该配置会只记录警告及以上级别的日志,自动过滤废弃提示。APP_DEBUG=false LOG_LEVEL=warning - 若需保留
APP_DEBUG=true,可修改config/logging.php,在目标日志通道(如stack)中添加过滤规则:'ignore_exceptions' => [\ErrorException::class => function ($e) { return str_contains($e->getMessage(), 'Deprecated:'); }],
2. 修改PHP配置文件
- 找到PHP配置文件(Laragon可直接在面板点击
PHP->php.ini打开),修改error_reporting项:
保存后重启Web服务器(Laragon点击error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICTRestart All),PHP将停止报告废弃类错误。
3. 代码中临时设置错误级别
在项目bootstrap/app.php文件开头添加以下代码,全局禁用废弃错误报告:
error_reporting(E_ALL & ~E_DEPRECATED);
4. 根源解决:升级Carbon依赖
禁用提示仅为临时方案,最稳妥的是升级Carbon至兼容当前PHP版本的版本,运行命令:
composer update nesbot/carbon
升级后废弃提示会自然消失,新版本Carbon已适配PHP类型声明要求。
内容的提问来源于stack exchange,提问作者Hawari Muflih Munte


