Laravel 5.8 Blade日期格式化代码Chrome/Firefox正常但Safari报错求助
问题根因与解决方案
核心代码错误
Blade的{{ }}本质是编译为PHP的echo结构,大括号内部禁止额外添加语句分号,代码末尾的分号会被Blade编译为带语法错误的PHP代码,这是最初全浏览器报错的根源。
Chrome、Firefox对HTML响应的容错率更高,移除分号后哪怕存在少量残留的编译异常、PHP警告输出,也会自动忽略并正常渲染页面;但Safari的HTML解析规则更严格,只要响应内容存在非预期的报错字符串、格式异常,就会直接展示报错提示,这也是调整代码后只有Safari仍报错的核心原因。
另外,直接使用strtotime($transaction->created_at)的写法属于冗余操作:Laravel的Eloquent模型时间戳字段会自动转换为Carbon实例,不需要额外做时间字符串转换,类型不匹配还容易触发PHP警告,额外输出异常内容。
正确代码写法
直接使用Carbon自带的格式化方法即可,不需要嵌套原生PHP时间函数:{{ $transaction->created_at->format('d M Y') }}
如果需要使用原生date函数,可直接取Carbon实例的时间戳,规避类型转换问题:{{ date('d M Y', $transaction->created_at->timestamp) }}
缓存清理无效的排查方向
执行cache:clear/config:clear/view:clear仅清除了本地磁盘存储的缓存文件,以下场景会导致错误结果持续存在:
- 若使用队列异步发送邮件,常驻运行的队列进程会持有旧的视图编译结果、内存缓存,必须执行
php artisan queue:restart重启队列进程,才能加载最新代码。 - 检查
config/app.php中的timezone参数,设置为项目实际使用的时区,避免时间计算异常触发PHP警告,将报错内容输出到邮件HTML中。 - 确认
.env文件中的APP_DEBUG配置,生产环境需设置为false,关闭PHP错误、警告的直接输出,避免异常内容嵌入HTML被Safari识别为报错。
内容的提问来源于stack exchange,提问作者Husni Kamal
相关产品推荐
相关产品推荐

