保留變數總覽
{$smarty} 為特殊保留變數,無需 assign() 即可在模板中直接存取 PHP 超全域陣列與環境資訊。
請求相關變數對照表
| 模板語法 | 對應 PHP | 範例 |
{$smarty.get.page} | $_GET['page'] | URL: ?page=3 → 3 |
{$smarty.post.username} | $_POST['username'] | 表單送出欄位 |
{$smarty.request.id} | $_REQUEST['id'] | GET/POST/COOKIE 合併 |
{$smarty.cookie.sid} | $_COOKIE['sid'] | Cookie 值 |
{$smarty.session.user_id} | $_SESSION['user_id'] | Session 值 (需 session_start) |
環境與系統變數
| 模板語法 | 對應 PHP | 用途 |
{$smarty.server.HTTP_USER_AGENT} | $_SERVER['HTTP_USER_AGENT'] | 瀏覽器資訊 |
{$smarty.server.REQUEST_URI} | $_SERVER['REQUEST_URI'] | 請求路徑 |
{$smarty.env.PATH} | $_ENV['PATH'] | 環境變數 |
{$smarty.now} | time() | 當前 Unix 時間戳 |
{$smarty.const.PHP_VERSION} | PHP_VERSION | PHP 常數存取 |
模板執行狀態變數
| 變數 | 說明 |
{$smarty.capture.foo} | 讀取 {capture name=foo}...{/capture} 內容 |
{$smarty.section.sec1.index} | {section name=sec1} 迴圈屬性 (index, iteration, first, last, show, total) |
{$smarty.foreach.myloop.first} | {foreach name=myloop} 迴圈屬性 |
{$smarty.template} | 目前模板檔名 (如 index.tpl) |
{$smarty.version} | Smarty 版本號 |
{$smarty.ldelim} / {$smarty.rdelim} | 左/右定界符 (預設 { / }) |
實務應用範例
<!-- 表單保持輸入值 -->
<input name="keyword" value="{$smarty.get.keyword|escape:'html'}">
<!-- 登入狀態顯示 -->
{if $smarty.session.user_id}
歡迎,{$smarty.session.username|escape}
<a href="/logout">登出</a>
{else}
<a href="/login">登入</a>
{/if}
<!-- 除錯輸出 -->
<!-- {$smarty.server|@print_r} -->
<!-- {$smarty.const|@print_r} -->
安全注意事項
- 永遠加上
|escape:'html' 輸出用戶輸入 (get/post/request/cookie) 防 XSS
- 避免在模板直接存取
$_SERVER['PHP_AUTH_PW'] 等敏感鍵
{$smarty.session} 需確認 session_start() 已執行
相關專題
- 《Smarty 模板入門基礎教程》
- 《PHP 模板技術總結》