視圖唯一職責:**接收控制器傳遞的資料陣列並呈現**。所有資料準備、權限檢查、格式化在控制器或 Service 完成。
4. 採用模板引擎而非原生 PHP
雖 CI 內建支援 PHP 模板,但建議引入 Twig、Blade、Smarty 等專用模板引擎:
痛點
原生 PHP
模板引擎
變數未定義
噴出 Notice/Warning
可設定嚴格模式拋出例外
XSS 防護
需手動 html_escape()
預設自動跳脫 {{ var }}
樣板繼承
需自行 include 組合
原生支援 extends/block
邏輯限制
可寫任意 PHP 程式碼
僅允許簡單邏輯,強制業務邏輯前置
設計師協作
需懂 PHP 語法
語法簡潔,非程式設計師也能修改
效能差異微乎其微 (模板編譯快取後極快),不應成為不採用理由。
進階技巧:View Model 模式
當視圖需要複雜格式化資料 (如:金額加千分位、日期相對時間、權限判斷顯示/隱藏),建議在控制器建立 View Model 物件:
class PostViewModel {
private $post;
public function __construct(array $post) {
$this->post = $post;
}
public function getTitle() { return html_escape($this->post['title']); }
public function getFormattedPrice() { return number_format($this->post['price']); }
public function getRelativeTime() { return timespan($this->post['created_at']); }
public function canEdit($user_id) { return $this->post['user_id'] == $user_id; }
// 視圖需要的所有衍生資料...
}
// 控制器
$view_model = new PostViewModel($post);
$this->load->view('post/detail', ['post' => $view_model]);
// 視圖