php 实现单一入口
单一入口实现方法
单一入口(Single Entry Point)是一种设计模式,通过一个入口文件(如index.php)集中处理所有请求,再根据参数分发到不同的控制器或模块。以下是实现步骤:
创建入口文件
在项目根目录创建index.php,作为唯一入口文件:
<?php
// 定义应用根目录
define('APP_PATH', dirname(__FILE__));
// 加载配置文件或路由逻辑
require_once APP_PATH . '/bootstrap.php';
// 路由分发
$router = new Router();
$router->dispatch($_SERVER['REQUEST_URI']);
?>
路由分发逻辑
在bootstrap.php或单独的路由类中实现URL解析和控制器加载:

class Router {
public function dispatch($uri) {
// 解析URI,例如从 /user/profile 提取模块和动作
$parts = explode('/', trim($uri, '/'));
$controller = !empty($parts[0]) ? $parts[0] : 'home';
$action = !empty($parts[1]) ? $parts[1] : 'index';
// 动态加载控制器类
$controllerClass = ucfirst($controller) . 'Controller';
if (class_exists($controllerClass)) {
$handler = new $controllerClass();
$handler->$action();
} else {
header("HTTP/1.0 404 Not Found");
echo 'Controller not found';
}
}
}
URL重写配置
通过.htaccess(Apache)或Nginx配置隐藏入口文件名,实现友好URL:
# Apache .htaccess 示例
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]
Nginx配置示例:

location / {
try_files $uri $uri/ /index.php?$query_string;
}
控制器示例
创建具体的控制器类,例如UserController.php:
class UserController {
public function profile() {
echo 'User profile page';
}
}
访问/user/profile时会自动调用该控制器方法。
注意事项
- 安全性:过滤输入参数,避免直接包含文件路径。
- 性能:可结合OPCache缓存编译后的脚本。
- 扩展性:可集成Composer实现自动加载(PSR-4)。






