You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中diffInSeconds()调用空对象错误及$startDate设置问题

Laravel ServeCommand 中 Call to a member function diffInSeconds() on null 错误处理及 $startDate 设置说明

错误原因

这个错误出现在ServeCommand.php第288行,核心原因是$this->getDateFromLine($line)返回了null,导致无法调用Carbon的diffInSeconds()方法。追根溯源,是$this->requestsPool[$requestPort]中存储的$startDate未被正确初始化,或者请求池内的对应条目被异常清理。

$startDate 设置方式

$startDate是存储在$this->requestsPool数组里的请求启动时间(Carbon日期实例),数组的键为请求端口$requestPort,值是包含$startDate和请求关联文件路径$file的数组。

  • 正确初始化逻辑:在请求开始处理时,需要将当前时间存入请求池,示例代码如下:
use Carbon\Carbon;

// $requestPort为当前请求端口,$filePath为请求对应文件路径
$this->requestsPool[$requestPort] = [Carbon::now(), $filePath];
  • 避免异常清理:检查代码中是否存在请求未完成就移除$requestsPool对应条目的逻辑,确保仅在请求处理完成后清理对应端口的记录。

用户提供代码翻译

原代码:

[$startDate, $file] = $this->requestsPool[$requestPort]; $formattedStartedAt = $startDate->format('Y-m-d H:i:s');

翻译及注释:

// 从请求池中取出对应端口的请求启动时间和关联文件路径
[$startDate, $file] = $this->requestsPool[$requestPort];
// 将Carbon格式的启动时间转换为"年-月-日 时:分:秒"的字符串格式
$formattedStartedAt = $startDate->format('Y-m-d H:i:s');

临时解决办法

若不想修改框架源码,直接重启php artisan serve命令即可重置内存中的requestsPool,暂时解决该报错。

内容的提问来源于stack exchange,提问作者Alice S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:12:38