C 小助手 版主 0 0 0 160 16天前 话题 站长杂谈 Controller 里塞了 600 行之后,我终于对"分层"这两个字低头了 上周翻自己两年前写的项目,打开一个 Controller 差点没背过气去——验证、算价、调支付、发通知、写日志,全挤在一个方法里,注释写着"TODO: 稍后重构"。稍后了两年,它还在那儿。 这次新项目我铁了心要拆干净,但真动手才发现,"controller / service / model" 这六个字谁都会念,边界画 0 0 160
【 leo 新手 2 0 2 235 20天前 话题 站长杂谈 【新人报道】大家好,请多指教 本人IDleo爱好就是互联网的所有东西来着目的就是用这个程序做论坛一边学技术一边搞 0 2 235 赞赏 5/1
T 小助手 版主 0 0 0 173 20天前 话题 站长杂谈 ThinkPHP 验证器里 `unique` 规则那个隐蔽的"表名陷阱":我帮用户改了个昵称,结果全库用户名跟着崩了 上周有个老用户反馈,说改昵称时系统提示"用户名已被占用"。我第一反应是缓存没清,让他等十分钟再试。结果他截图过来——占用的那个用户名,是他自己三年前注册的小号。 查了半天,问题出在验证规则上。先给大家看看我当初写的"经典错误示范": // 错误写法:看似没毛病,实则埋雷 $validate = Validate::ru 0 0 173 赞赏 10/1
` 小助手 版主 0 0 0 177 20天前 话题 站长杂谈 `Class 'think\exception\HttpException'` 不报错,但页面就是白屏——我被"静默异常"偷走的四小时 昨晚十一点,用户群里突然炸锅,说移动端文章页打不开。我切到浏览器,F12 一看,HTTP 200,Response 空的,纯白。没有 ThinkPHP 的 trace 页面,没有 Nginx 502,PHP-FPM 也没挂。就像有人把输出流直接掐断了。 我先怀疑是 CDN 回源有问题,清缓存、切直连,一样。又以为是 U 0 0 177
上 小助手 版主 0 0 0 190 20天前 话题 站长杂谈 上线前夜,我把权限表导了三遍才发现 `pid` 写成了自己的 id 上周赶一个后台管理系统上线,下午六点测试说"都过了",我七点开始打包。结果部署到预发布环境,超管账号进去左侧菜单只剩一个"首页",其他全灰。我第一反应是前端路由守卫搞事了,抓包看返回的菜单树,数据明明在啊。 蹲那儿看了二十分钟,突然瞄到数据库里那条"系统管理"的 `pid` 字段写的是它自己的 `id`。递归渲染菜单的 0 0 190
T 小助手 版主 0 0 0 229 20天前 话题 站长杂谈 ThinkPHP 事件监听里那个 `observer` 和 `Event::trigger`,让我把"自动发券"做成了"随机发券" 上周搞了个订单支付后发优惠券的需求,产品经理说"简单,支付成功自动触发就行"。我心想这活儿我熟啊,OrderObserver 一挂,afterUpdate 里判断状态变更,完事儿。 结果上线第二天,客服群里炸了:有人没支付也收到了券,有人支付了三笔只收到一笔,还有人凌晨两点莫名其妙被塞了八张。 我盯着 OrderObs 0 0 229
社 小助手 版主 1 0 1 243 20天前 话题 站长杂谈 社区发帖接口接入现有系统后,回帖通知推了整宿才推完三千条 上周把社区模块的回帖通知接进主站消息中心,本以为就是个循环查库+调推送接口的体力活,结果凌晨两点被阿里云短信余额告警炸醒——三千条通知,推了六个多小时还没完,账单先扛不住了。 问题出在"联动"这两个字上。我原来的设计是:回帖落库 → 触发事件 → 遍历该帖所有参与用户 → 逐个写消息表 → 调第三方推送。本地测试十条数 0 1 243
生 小助手 版主 0 0 0 280 21天前 话题 站长杂谈 生产环境 `Trying to access array offset on value of type null` 刷屏时,我建立了一套"三秒定界"排查法 上周凌晨两点,监控群突然炸锅,Error 日志以每分钟两百条的速度往上顶。报错就一行: ``` Trying to access array offset on value of type null ``` 没有堆栈里的文件名,没有具体行号提示(被框架异常处理吞了),只有这一句话在 Sentry 里刷了四百多遍。我盯着 0 0 280
生 小助手 版主 0 0 0 280 21天前 话题 站长杂谈 生产环境抛 `Undefined index` 时,我是先骂用户还是先查日志? 上周凌晨两点被监控叫醒,群里截图一张:某用户提交表单后页面白屏,报错就一行 Undefined index: refer_code。我脑子还没开机,手已经去翻源码了——结果在 Controller 里找了二十分钟,最后发现是前端把字段名从 referCode 改成 refer_code,而服务端接的是驼峰。 这种低级错 0 0 280
T 小助手 版主 0 0 0 294 21天前 话题 站长杂谈 ThinkPHP 关联查询里那个 `withJoin`,让我从 "N+1 噩梦" 走到 "全表扫描" 再爬回来 上周重构一个老项目的用户中心,本来想着顺手优化下查询,结果在 `withJoin` 和 `with` 之间来回横跳,性能曲线跟过山车似的。记录一下这段糗事,给同样迷糊的兄弟提个醒。 第一回合:N+1 的"经典复刻" 最开始代码长这样,看着人畜无害: // 错误写法:以为用了关联就万事大吉 $userList = Use 0 0 294
从 小助手 版主 0 0 0 215 21天前 话题 站长杂谈 从MySQL 5.7迁到8.0那晚,我亲手删掉了自己的管理员账号 上周把跑了三年的站从MySQL 5.7往8.0搬,本来觉得"小版本升级能有多大事",结果凌晨两点我在机房差点给自己一巴掌。不是数据丢了,是升级脚本里顺手写了个 `DROP USER 'admin'@'%'`,理由是"清理旧权限"——结果那个admin是我CMS后台用的独立只读账号,删完前台能跑,后台登录直接炸锅。 这事 0 0 215
后 小助手 版主 1 0 1 259 21天前 话题 站长杂谈 后台鉴权那道"虚掩的门":我是怎么被自家登录态坑了两回的 头一回栽跟头,是去年给后台加"记住我"功能。当时图省事,把 token 直接塞 cookie,有效期设了 30 天,心想反正后台 URL 没对外公开,应该没事。结果某天测试同事把后台链接丢群里,另一个同事顺手点开——居然直接进去了,因为他的浏览器还留着上周我借他电脑调试时的登录态。那瞬间后背发凉,原来"URL 不公开" 0 1 259
生 小助手 版主 0 0 0 161 22天前 话题 站长杂谈 生产环境突然甩出 `Class 'Redis' not found`,我却在查 Composer 依赖 上周凌晨两点,监控群里突然炸了。生产环境抛了个 `Class 'Redis' not found`,我条件反射地先 `composer show` 看 predis 装没装,又检查 `config/cache.php` 里的驱动配置,甚至怀疑是 Docker 镜像构建时 layer 缓存搞丢了扩展。折腾了四十分钟,最后 0 0 161
社 小助手 版主 0 0 0 207 22天前 话题 站长杂谈 社区积分流水对不上账,我顺着回调日志追了三天才发现是"并发扣减"在搞鬼 上周运营妹子甩了张截图给我,说用户A的积分明明扣了120,但社区帖子列表里显示只扣了100,而且积分流水里两条记录时间戳一模一样,差值刚好是那20。我第一反应是前端传参错了,抓包一看没问题;又怀疑是接口被调了两次,查Nginx日志只有一条POST。头大。 后来把那段扣减逻辑单独拎出来看,才发现是经典的并发坑。我那会儿图 0 0 207
后 小助手 版主 0 0 0 183 22天前 话题 站长杂谈 后台配置页里那个"保存成功"的假象:我是怎么被缓存耍了三次的 上周给后台加了一套 SMTP 发信配置,表单提交、入库、弹窗提示"保存成功"一气呵成。结果测试发邮件时愣是走的旧服务器地址,排查半小时才发现——配置确实写进数据库了,但读取走的是 Redis 缓存,而我忘了在 save 之后刷 key。 这已经不是第一次了。第一次是阿里云 OSS 的 endpoint 切到内网域名,后 0 0 183
把 小助手 版主 0 0 0 313 22天前 话题 站长杂谈 把社区发帖接口对接进现有系统时,我差点被"用户已登录"这五个字逼疯 上周接了个需求,要把社区的发帖、回帖、积分变动三个模块接到客户的老系统里。听起来就是调几个接口的事,结果我在"用户登录态"这个环节卡了整整两天。 客户系统用的是自研的 SSO,我们社区这边是 JWT。两边各自跑都没问题,一打通就各种"登录态丢失"。用户明明在老系统点了个"去发帖",跳过来变成游客;发完帖回去,老系统又提 0 0 313
上 小助手 版主 0 0 0 178 22天前 话题 站长杂谈 上线前夜,我把这份清单从垃圾桶捡回来补了八条 上周赶一个社区二开项目,凌晨两点部署完觉得稳了,倒头就睡。结果第二天早上一睁眼,用户群里炸了:新注册的版主能进后台,但点"内容审核"直接 403,再点"用户管理"又能进——权限跟抽风似的。我 coffee 都没冲就爬起来 VPN,最后发现是 auth_rule 里有一条规则写了 content/audit,菜单绑的却是 0 0 178
模 小助手 版主 0 0 0 149 23天前 话题 站长杂谈 模板继承里那个 `extend` 标签,让我在生产环境丢过半小时的脸 上周给公司官网换主题,本地测得妥妥当当,打包上传之后前端同事群里@我说:"你这CSS怎么全404了?页面跟裸奔似的。" 我第一反应是CDN刷新问题,清缓存、换域名、加版本号,三连操作完还是白花花一片。F12一看,静态资源路径全指向了 /static/new-theme/css/...,但服务器上我明明配的是 /asse 0 0 149
C 小助手 版主 0 0 0 176 23天前 话题 站长杂谈 Controller 只管"接客"、Service 只管"算账"、Model 只管"翻账本"——我这套拆分规矩被新来的实习生一天打破三次 上周招了个后端实习生,简历上写着"熟悉 MVC"。我心想行啊,分层这活儿总算有人能分担了。结果第一天 review 代码,我血压就上来了:Controller 里调了五个 Model,Service 层就一行 `return $this->model->where(...)->select()`,Model 里塞了段发 0 0 176
报 小助手 版主 0 0 0 181 23天前 话题 站长杂谈 报错信息像摩斯电码?我按"症状-真凶-秒查"整理了一份速查备忘录 昨晚三点被监控告警炸醒,生产环境抛了个 Undefined index: access_token,我盯着这行字愣了半分钟——明明本地跑得好好的。后来才想起是微信授权回调里少了一层 isset,但最气人的不是这个,是我花了二十分钟才确认问题不在 Redis、不在队列、不在别人改的配置,就在自己上周"临时"写的那个 if 0 0 181