分类: Web框架
-
针对Laravel 9中复用Spatie QueryBuilder构建导出功能时遇到的序列化报错问题,文章介绍了在异步队列中将Request对象转换为数组传递,进而在队列内部重新构造Request对象的解决方案。经过对比打印,转换前后的请求数据完全一致,最终成功复用了查询构建逻辑,实现了符合预期的功能。
-
本文针对使用 php-ext-xlswriter 导出 Excel 时遇到的 Class not found 报错进行排查,通过下载并配置扩展解决了依赖缺失问题。随后处理了文件创建失败和索引越界的异常,发现关联数组兼容性和文件名非法字符是导致错误的关键原因。最终通过替换文件名中的冒号并匹配正确的扩展版本,成功实现了 Excel 文件的正常导出。
-
本文记录了在 Laravel 9 中执行 Redis::set 写入 Carbon 对象时遇到的数据类型差异问题,对比了生产环境写入 Object 与测试环境写入日期时间字符串的不同表现。通过对比 .env 文件发现,差异根源在于客户端配置的不同,详细分析了 PHPRedis 扩展与 predis/predis 包在处理该操作时的具体区别,最终根据配置差异确定了问题成因。
-
在 Laravel 9 配合 MySQL 8.0 环境中,设置 datetime 字段默认值为 0000-00-00 00:00:00 时遇到了 1067 语法错误。文章记录了修改 my.ini 配置文件移除 NO_ZERO_IN_DATE 与 NO_ZERO_DATE 模式并重启电脑的过程,尽管手动执行 SQL 成功,但程序运行问题依旧。最终通过调整迁移文件,放弃设置该默认值解决了报错。
-
在 Laravel 9 中执行 php artisan telescope:install 时遇到报错,提示没有定义该命令。排查发现配置文件中缺少 TelescopeServiceProvider 服务提供者。将其重新添加到 config/app.php 后再次运行命令,报错不再出现,问题解决。此外,也可在 AppServiceProvider 的 register 方法中手动注册该服务提供者。
-
在使用 Guzzle PHP HTTP client 发起请求时,当服务端返回非 20x 状态码时,默认会抛出异常导致无法获取响应对象 $response 变量。为了能够对响应中的 status 字段进行判断并执行后续逻辑,需要参考文档将 http_errors 请求选项设置为 false。调整代码后,当服务端返回 400 状态码时不再抛出 GuzzleHttp\Exception\ServerException,程序能够正常获取响应内容,符合预期处理需求。
-
在 Laravel 6 中遇到队列任务失败后,异常信息未写入 failed_jobs 表的问题。排查发现任务一直未结束也未失败,且表中无新增记录。通过在 .env 文件中禁用 Telescope 可以恢复记录,追溯根源为代码中执行 View::addLocation 后删除了目录导致。决定不再删除该目录后重新运行,任务成功失败且表中已正常增加记录。
-
在 Laravel 6 队列排查过程中,针对测试环境正常但生产环境部分视图文件未执行的问题,通过模拟 Rancher 集群部署复现了缺陷。发现原因是队列任务存在文件依赖,但在集群模式下,解压缩主题包的机器与执行迁移任务的机器不一致,导致文件丢失。最终决定通过 dispatchNow 方法强制相关 Job 在同一台机器同步执行,经验证解决了文件查找失败的问题,且异常处理逻辑符合预期。
-
在 PHP 7.4 开发中,为了从一维数组中准确筛选出符合 uri 格式的数据,直接使用 filter_var 函数进行校验时,会将 internal://policy_pages/29 这样的非标准链接包含在内,导致结果不符合预期。通过改用 parse_url 函数获取 URL 的 scheme 部分,并严格判断其是否为 http 或 https,成功过滤掉了内部协议数据,实现了对标准外部链接的准确提取。
-
针对 Laravel 6 写入日志时未生成当日文件的问题,排查发现系统时间为北京时间 2023-09-15,却生成了前一天的日志文件。经检查配置文件,`app.timezone` 设置为 `Etc/GMT+8`。根据 Etc 区域时区命名规则,该时区实际代表西八区,比北京时间早 16 小时,导致 Laravel 程序判定当前时间为 2023-09-14,从而写入旧的日志文件。
