钩子调试三板斧:console.log断点法在ThinkPHP中的实战姿势
昨晚给商城系统加了个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了...
最新打赏

