在 Smarty 模板引擎中,{$smarty} 保留變數是一組無需在 PHP 腳本中額外指派即可直接於模板中存取的特殊陣列變數。它極大地簡化了模板層對請求資料、環境資訊及系統常數的獲取,是開發高效、乾淨模板的關鍵工具。
傳統做法需在 PHP 中以 assign() 將 $_GET、$_POST、$_COOKIE、$_SESSION、$_SERVER、$_ENV 等超級全域陣列逐一傳遞給模板。而透過 {$smarty},您可以在模板中直接以點語法呼叫對應鍵值,語法直觀且減少控制器層的樣板程式碼。
{* 等同於 $_GET['page'] *}
{$smarty.get.page}
{* 等同於 $_POST['page'] *}
{$smarty.post.page}
{* 等同於 $_COOKIE['username'] *}
{$smarty.cookies.username}
{* 等同於 $_SESSION['id'] *}
{$smarty.session.id}
{* 等同於 $_SERVER['SERVER_NAME'] *}
{$smarty.server.SERVER_NAME}
{* 等同於 $_ENV['PATH'] *}
{$smarty.env.PATH}
{* 等同於 $_REQUEST['username'] *}
{$smarty.request.username}
無論是系統內建常數(如 __FILE__、PHP_VERSION)或專案自訂常數,均可透過 {$smarty.const.常數名} 直接輸出,無需在 PHP 端額外處理。
{* 輸出自訂常數 _MY_CONST_VAL *}
{$smarty.const._MY_CONST_VAL}
{* 輸出系統常數 __FILE__ *}
{$smarty.const.__FILE__}
date_format 修飾器可格式化輸出,例如 {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}。{capture}...{/capture} 區塊捕獲的輸出內容。{$smarty.config.foo} 等同於 {#foo#}。section 與 foreach 迴圈的屬性(如 index、iteration、first、last 等)。善用 {$smarty} 保留變數,不僅能減少 PHP 控制器與模板之間的資料傳遞負擔,更能讓模板邏輯更專注於呈現層,提升專案的可維護性與開發效率。