當系統參數不宜硬編碼在 PHP 程式中時(如資料庫連線資訊、API 金鑰、介面顏色等),Smarty 的配置檔機制提供完美解決方案。本文詳細說明如何建立配置檔、在模板中載入使用,並重點解析相對路徑的解析規則,避開常見路徑錯誤陷阱。
建立 db.conf(副檔名可自訂,如 .ini、.cfg):
host = "localhost"
username = "root"
password = "123456"
db_name = "liuyan"
格式規則:每行一組 鍵 = "值",值建議用雙引號包裹,無需分號結尾,換行即可。
{config_load file="db.conf"}
<html>
<h2>Smarty 變數操作,從配置檔中獲取</h2>
<p >{#host#}</p>
<p >{#username#}</p>
</html>
配置變數在模板中以 {#變數名#} 語法輸出,區別於一般指派變數的 {$變數名}。
<?php
require_once("./libs/Smarty.class.php");
$smarty = new Smarty();
// 無需 assign,直接 display
$smarty->display("index.tpl");
?>
關鍵差異:使用配置檔時,PHP 端完全不需處理資料指派,模板自主載入,實現配置與程式碼完全解耦。
{config_load file="db.conf"} 的 file 路徑相對於執行腳本(通常是 index.php)所在目錄,而非模板目錄。
/var/www/html/
├── index.php ← 執行入口
├── db.conf ← 配置檔放這裡
└── templates/
└── index.tpl ← 模板檔
此時模板寫 {config_load file="db.conf"} 即可正確載入,因為 index.php 與 db.conf 同層。
| 專案結構 | 模板寫法 | 結果 |
|---|---|---|
| 配置檔在 templates/ 同層 | file="db.conf" | ✅ 正確 |
| 配置檔在 templates/configs/ | file="configs/db.conf" | ✅ 正確 |
| 配置檔在上層目錄 | file="../db.conf" | ✅ 正確 |
| 配置檔在任意絕對路徑 | file="/etc/app/db.conf" | ✅ 正確 |
配置檔支援區段,對應不同環境:
[development]
db_host = "localhost"
debug = "true"
[production]
db_host = "10.0.0.50"
debug = "false"
模板動態切換:
{config_load file="db.conf" section=$env}
{#db_host#}
PHP 端指派 $smarty->assign('env', 'production'); 即可實現環境隔離。
Smarty 配置檔機制讓敏感參數、環境差異配置能獨立管理。核心三要素:1. 檔案格式標準化 2. 路徑相對執行腳本 3. 模板自主載入。善用區段功能,可輕鬆實現多環境部署零程式碼修改。