首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 中 MVC 模式演進與實踐指南

     編輯:PHP 相關知識

三個階段演進

階段架構特點優點缺點
Model 1JSP/ASP/PHP 混寫 HTML + SQL單文件包含展示與邏輯簡單、開發快、適合極小項目耦合極高、難維護、不利團隊協作
Model 2 (MV)View (PHP/HTML) + Model (Class)業務邏輯封裝到類,視圖只負責顯示分層清晰、可復用、利於分工控制邏輯分散在各 View,請求多時混亂
MVCModel + View + Controller引入 Controller 統一分發請求職責單一、易擴展、利於大型團隊初期搭建成本高、學習曲線陡

MVC 核心組件職責

  • Model (模型):封裝業務邏輯、數據訪問(DAO/ORM)、驗證規則。不包含任何輸出邏輯。
  • View (視圖):模板文件(.phtml/.blade.php/.twig),僅負責數據展示,可包含簡單循環/判斷,禁用複雜邏輯。
  • Controller (控制器):接收請求(路由分發)、調用 Model、組裝數據、選擇 View 渲染。不直接操作數據庫、不輸出 HTML。

從 Model 2 遷移到 MVC 的關鍵步驟

  1. 建立 Controller 基類,統一處理請求參數、異常、視圖渲染。
  2. 將原分散在 View 頂部的 $_GET/$_POST 邏輯移入 Controller Action。
  3. 建立路由機制:URL → Controller@Action(如 /user/profile → UserController@profile)。
  4. 引入前端控制器(Front Controller)index.php 作為唯一入口,所有請求經由它分發。

簡易 MVC 骨架示例

// public/index.php (唯一入口)
require __DIR__.'/../vendor/autoload.php';
$app = new App();
$app->run();

// core/App.php
class App {
    public function run() {
        $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
        $route = Router::match($uri); // ['controller'=>'User','action'=>'show','params'=>['id'=>1]]
        $controller = new $route['controller']();
        $controller->{$route['action']}(...$route['params']);
    }
}

// core/Controller.php
abstract class Controller {
    protected function view(string $template, array $data = []) {
        extract($data);
        include VIEW_PATH . "/{$template}.php";
    }
    protected function json(mixed $data) {
        header('Content-Type: application/json');
        echo json_encode($data);
    }
}

// app/controllers/UserController.php
class UserController extends Controller {
    public function show(int $id) {
        $user = UserModel::find($id);
        if (!$user) { $this->json(['error'=>'Not found']); return; }
        $this->view('user/profile', ['user' => $user]);
    }
}

// app/models/UserModel.php
class UserModel {
    public static function find(int $id): ?array {
        // PDO 查詢...
        return ['id'=>$id, 'name'=>'Alice'];
    }
}

// app/views/user/profile.php
<h1>用戶資料</h1>
<p>姓名:<?= htmlspecialchars($user['name']) ?></p>

現代框架對 MVC 的增強

  • 依賴注入容器:自動解析 Controller 構造函數依賴(Service、Repository)。
  • 中間件:請求前後攔截(認證、限流、日誌、CORS)。
  • ORM/ActiveRecord:Model 變為富領域模型,封裝關聯、驗證、事件。
  • 表單請求驗證:獨立 FormRequest 類處理驗證規則、授權邏輯。
  • 資源類:API 統一資源轉換,解耦數據庫結構與對外結構。

總結

MVC 不是銀彈,但它為 PHP 專案提供了清晰的分層邊界。小項目可用輕量骨架;中大型項目建議直接採用 Laravel、Symfony、ThinkPHP 等成熟框架,專注業務創新而非重複造輪子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved