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
相关产品推荐
相关产品推荐

