ThinkPHP6.0静态资源必须置于public/static/目录下,Web根目录须指向public/,模板中用asset()生成URL且路径以public为基准;支持通过配置和自定义函数适配CDN,禁用__STATIC__等旧机制。

ThinkPHP6.0 引入静态资源文件,核心原则是:所有可被 Web 直接访问的 CSS、JS、图片等,必须放在 public/ 目录下,且推荐统一置于 public/static/ 子目录中;不能像 TP3.2 那样依赖 __STATIC__ 替换或 TMPL_PARSE_STRING 配置。
确保静态文件物理位置正确
把原项目中的静态资源(如 CSS、JS、IMG)整体迁移到新项目的 public/static/ 下,保持原有子目录结构。例如:
- 旧路径
Public/css/app.css→ 新路径public/static/css/app.css - 旧路径
static/js/lib/jquery.js→ 新路径public/static/js/lib/jquery.js
Web 服务器的根目录(document root)必须指向 public/,否则请求会 404。常见错误是把文件放到 public/ 根下或项目根目录,这会导致 asset() 失效或路径混乱。
模板中用 asset() 助手函数生成 URL
在模板(如 .html 或 .php 视图文件)中,使用 {{ asset('static/css/app.css') }} 或 {:asset('static/js/main.js')},不要手写 /static/xxx 或 __STATIC__/xxx。
-
asset()自动拼接当前域名 + 传入路径,不读取任何配置,所以路径必须以 public 下的相对路径为基准 - 传入路径不能带
public/前缀,asset('public/static/css.css')是错的 - 若资源在
public/assets/,就写asset('assets/img/logo.png')
支持多环境与 CDN 的灵活配置
如需适配不同部署场景(如本地开发、测试服、CDN),可通过配置 + 自定义函数增强可控性:
- 在
config/app.php中添加:'static_prefix' => env('STATIC_PREFIX', '/static') - 在
app/common.php中定义助手函数:function static_url($path) { return config('app.static_prefix') . ltrim($path, '/'); } - 模板中调用:
{:static_url('css/app.css')},便于后期统一替换为 CDN 地址(如https://cdn.example.com/v1)
避免常见陷阱
以下做法容易导致路径失效或缓存冲突:
- 在 Nginx/Apache 中未正确配置静态资源 location,导致请求被转发到
index.php而非直接返回文件 - 使用
php -S内置服务器时没配router.php拦截静态请求,造成 CSS/JS 404 - 在
view_replace_str中硬编码__STATIC__,TP6 已废弃该机制,且 runtime 缓存会固化路径,切换域名时失效 - 把
static目录挪出public/,破坏了asset()的查找逻辑
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











