在 ThinkPHP 模板中使用 ../Public 相對路徑引用靜態資源時,模板引擎會自動將其替換為當前模塊的公共模板目錄(如 /Project/Tpl/Default/Public/),導致資源載入失敗。
ThinkPHP 模板引擎內建字符串替換機制,預設會將 __PUBLIC__、__ROOT__ 等特殊標識替換為對應路徑。../Public 被誤識別為需替換的標識。
在專案配置文件 config.php 中添加 TMPL_PARSE_STRING 規則,強制保持原樣輸出:
[
'../Public' => "../Public", // 鍵值相同,表示不替換
// 可批量添加更多保持原樣的路徑
// '../Static' => "../Static",
],
];
?>
TMPL_PARSE_STRING 接受陣列,鍵為「模板中出現的字符串」,值為「替換後的字符串」str_replace'TMPL_PARSE_STRING' => [
'__STATIC__' => __ROOT__ . '/Public/Static', // 自定義靜態資源根目錄
'__UPLOAD__' => __ROOT__ . '/Uploads', // 上傳檔案目錄
'../Public' => "../Public", // 保持相對路徑
'__CSS__' => __ROOT__ . '/Public/Css',
'__JS__' => __ROOT__ . '/Public/Js',
'__IMG__' => __ROOT__ . '/Public/Images',
],
Runtime/Cache/)__STATIC__ 等自定義標識,避免相對路徑在不同模塊深度下失效更多 ThinkPHP 技巧請參考:《ThinkPHP 入門教程》及《ThinkPHP 常用方法總結》。