ThinkPHP 的 U() 方法主要用於生成 URL,但結合動態輸出技巧,可實現「透過控制器動作輸出 JS 內容」的需求,適用於需根據權限、語言動態生成腳本的場景。
<?php
class JsAction extends Action {
public function nav() {
// 直接渲染模板文件,不使用佈局
$this->display('Index:js:nav'); // 對應 Tpl/Index/js/nav.html
}
}
?>
將原本的 nav.js 改名為 nav.html(或 nav.tpl),內容可包含模板變數:
// Tpl/Index/js/nav.html
var siteUrl = '{$siteUrl}';
var userId = {$userId};
function initNav() { console.log('Dynamic JS loaded'); }
<script type="text/javascript" src="{:U('Js/nav')}"></script>
nav() 方法中讀取多個 JS 文件、壓縮後統一輸出,減少 HTTP 請求。header('Cache-Control: max-age=3600') 並配合 ETag 實現瀏覽器快取。header('Content-Type: application/javascript; charset=utf-8');Tpl/模塊/js/ 目錄,便於管理。Controller 基類與命名空間寫法。此技巧讓 JS 從靜態資源變為動態可控的應用層組件,極大提升前端靈活度。