汽車 = MVC:內飾/外觀 = View(顯示);駕駛員 = Controller(控制);剎車/方向盤/引擎 = Model(模型,實際執行邏輯)。駕駛員下指令,模型執行,視圖呈現結果。
單一入口 index.php 為 Controller,根據參數 (module, event, action) 決定載入哪個模組類別並呼叫哪個方法。如 /index.php?module=foo&event=bar → foo::bar()。
優勢:
現有框架 (Solar, Cake) 均未充分利用 PEAR/Smarty 等成熟庫;Cake 早期混亂;Solar 單人維護風險大。自建可量身打造,整合團隊熟悉的工具鏈。
<?php
require_once('config.php');
$APP_DB = 'mydb'; $APP_REQUIRE_LOGIN = false;
$APP_TEMPLATE_FILE = 'foo.php'; $APP_TITLE = "My App";
if ($APP_REQUIRE_LOGIN && !isset($_SESSION['userID'])) { header('Location: /login.php'); exit(); }
$db = DB::connect('mysql://...');
// 業務邏輯混雜在這裡...
include_once('header.php');
include_once($APP_TEMPLATE_FILE);
include_once('footer.php');
?>
缺點:輸出格式死板(只能 HTML)、驗證方式硬編碼、多級權限難擴充、無法輕易切換 PDF/SOAP 輸出、緩存控制分散。
<?php
class myapp extends FR_Auth_User {
public function __construct() { parent::__construct(); }
public function __default() { /* 預設動作 */ }
public function delete() { /* 刪除邏輯 */ }
public function __destruct() { parent::__destruct(); }
}
?>
Controller 掌握一切:認證策略可換 (LDAP/DB)、輸出格式可切 (HTML/PDF/SOAP)、事件處理單一職責、緩存由 Controller/模板引擎協作控制。一旦轉型 MVC,回不去舊路。