钩子调试三板斧:console.log断点法在ThinkPHP中的实战姿势

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 99 浏览 19 回复

昨晚给商城系统加了个after_order_success钩子死活不触发,折腾到凌晨两点才找到原因。分享下ThinkPHP6里调试钩子的野路子,比官方文档更实用的那种。

第一招:钩子注册检查大法。在event.php里写完监听配置后,很多人会忘记清除runtime下的缓存文件。这时候直接上命令行跑"php think optimize:clear",比手动删目录靠谱多了。有个隐藏坑是部分虚拟主机禁用shell_exec函数,这时候只能FTP删缓存文件夹。

第二招:暴力console.log定位法。在自定义钩子类里先不写业务逻辑,直接在最开始加三行:file_put_contents('/tmp/hook.log', date('Y-m-d H:i:s')." 钩子触发\n", FILE_APPEND); 简单粗暴但有效,特别适合生产环境调试。有次我遇到宝塔面板环境下钩子不触发,最后发现是open_basedir限制导致log写不进去。

第三招:Xdebug断点玄学。在IDE里给钩子类打断点时,记得把"监听所有请求"改成"监听指定路径",否则断点会被系统钩子刷屏。有次我监听Order类的paySuccess方法,结果发现事件被中间件里某个return拦截了,这种问题用log根本查不出来。

现在我的调试流程固定三板斧:先清缓存看日志,再补log文件观察,最后上断点精准打击。自从养成这个习惯,再也不怕半夜被运营同事连环call了...

评论19
回复 · 19
Kate
Kate 新手时梦乐园 · #19 ·
已解决,谢谢楼主
朱娜丽
朱娜丽 新手心屿荧途 · #18 ·
写得很清楚,收藏了
DrewChen
DrewChen 新手赏金猎人 · #17 ·
已解决,谢谢楼主
Iris
Iris 新手 · #16 ·
已解决,谢谢楼主
韩琳博
韩琳博 新手 · #15 ·
同求,期待更新
蔡伟
蔡伟 初级清瑶问鼎 · #14 ·
已解决,谢谢楼主
晚风里的柚子
晚风里的柚子 新手虹翼巡游 · #13 ·
写得很清楚,收藏了
孙超宁
孙超宁 新手 · #12 ·
写得很清楚,收藏了
自由的海盐
自由的海盐 新手心屿荧途 · #11 ·
写得很清楚,收藏了
Miles
Miles 新手漫步繁花 · #10 ·
学到了,顶一下
阿夜
阿夜 初级赤羽栖云 · #9 ·
学到了,顶一下
温柔的白云
温柔的白云 初级 · #8 ·
支持了~
马凯桂
马凯桂 初级 · #7 ·
已解决,谢谢楼主
GraceSong
GraceSong 新手 · #6 ·
感谢分享!
韩桂
韩桂 初级 · #5 ·
学到了,顶一下
RyanMoon
RyanMoon 初级星灿心语 · #4 ·
已解决,谢谢楼主
Finn
Finn 新手璃海华章 · #3 ·
已解决,谢谢楼主
Knox
Knox 新手漫步繁花 · #2 ·
写得很清楚,收藏了
YukiRain
YukiRain 新手 · #1 ·
已解决,谢谢楼主
微信客服 微信客服