TP6 模板继承里 `__CSS__` 别名指向了上上个项目的目录,我盯着浏览器缓存清了两小时

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

昨晚给一个新站换皮肤,顺手把公共头部抽成了基础模板。`layout.html` 里写了段喜闻乐见的资源引入:

{block name="style"}{/block}

子模板继承、覆盖 block、清浏览器缓存,一气呵成。刷新页面,样式出来了,还挺顺。结果切到内页,F12 里一片红——`__CSS__` 解析成了 `/static/admin/css/`,可我当前项目明明是 `/static/home/`。

我第一反应是 `config/view.php` 里 `tpl_replace_string` 配错了,翻过去一看,干干净净,压根没配这玩意儿。那这别名哪来的?

TP6 的 `__CSS__` 不是框架原生常量,是以前项目里在 `AppService.php` 的 `boot` 方法中 `think\facade\View::assign` 批量注入的。这次新项目我直接复制了旧项目的 `common.php` 和 `provider.php`,连带把自定义的视图初始化逻辑也捎过来了。

更坑的是,这个注入是在服务层做的,不在视图配置里,找起来要多拐一道弯。而且我本地环境同时跑了三个站,域名不同但端口接近,浏览器缓存一捣乱,有时候刷新出来的是 A 项目的样式,有时候是 B 项目的,让我一度怀疑是 CDN 回源出了问题。

最后定位到时,我已经把 `runtime` 删了五遍、换了三个浏览器、甚至怀疑过 Nginx 的 `location ~* \.(css)$` 是不是配了诡异的 `alias`。

现在我的 `AppService.php` 里加了段项目前缀校验,虽然粗暴但管用:

if (strpos(request()->rootUrl(), 'admin') !== false) {
    View::assign('__CSS__', '/static/admin/css');
} else {
    View::assign('__CSS__', '/static/home/css');
}

另外把 `tpl_replace_string` 从服务层挪回了 `config/view.php`,至少下次复制项目时,一眼就能看见这堆别名定义。复制旧代码确实是快,但那些藏在 `boot` 方法里的"遗产",清理起来比重新写还费时间。

评论0
回复 · 0
还没有回复
微信客服 微信客服