萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP MVC 框架路由核心原理:單入口解析與控制器分發

路由是 MVC 框架的入口守門人,將 URL 映射為具體的控制器類與方法。單入口模式下,所有請求經 index.php 進入,框架內部解析 $_SERVER 變量完成分發。

核心變量與解析邏輯

$root    = $_SERVER['SCRIPT_NAME'];   // /MVC/index.php
$request = $_SERVER['REQUEST_URI'];   // /MVC/index.php/class/method/arg1
$url     = trim(str_replace($root, '', $request), '/'); // class/method/arg1

路由解析規則

URL 結構控制器方法參數
/Indexwelcome[]
/userUserindex[]
/user/profileUserprofile[]
/article/show/123Articleshow[123]

極簡分發代碼

<?php
define('APPPATH', __DIR__);

$root    = $_SERVER['SCRIPT_NAME'];
$request = $_SERVER['REQUEST_URI'];
$url     = trim(str_replace($root, '', $request), '/');

if (empty($url)) {
    $class = 'Index'; $func = 'welcome';
} else {
    $uri = explode('/', $url);
    $class = ucfirst($uri[0]);
    $func  = $uri[1] ?? 'index';
    $args  = array_slice($uri, 2);
}

include APPPATH . "/application/controllers/{$class}.php";
$obj = new $class();
call_user_func_array([$obj, $func], $args);

關鍵函數解析

  • call_user_func_array(callable, array):動態調用方法並展開參數陣列。
  • array_slice($uri, 2):提取第 3 段起作為方法參數。

安全與健壯性增強(生產必備)

  • 輸入驗證:檢查類/方法是否存在(class_exists/method_exists),防止任意文件包含。
  • 命名規範:限制控制器命名(如 PascalCase)、方法名(camelCase)。
  • 路由表:支援 RESTful、參數正則、中介軟體、命名路由,不再依賴單純 URL 分段。
  • 404 處理:找不到控制器/方法時拋出統一異常,由錯誤處理器渲染友好頁面。

結語

路由看似簡單,實則是框架靈活性的基石。從手動分發到功能完整的路由組件(如 Symfony Router、FastRoute),核心思想始終是:URL → 控制器/動作 + 參數 的確定性映射。

copyright © 萬盛學電腦網 all rights reserved