php路由的实现
PHP 路由的实现方法
使用原生 PHP 实现路由
通过解析 URL 和请求方法,手动匹配路由规则。通常需要结合 .htaccess 文件或服务器配置实现 URL 重写。
// 获取请求路径和方法
$requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$requestMethod = $_SERVER['REQUEST_METHOD'];
// 定义路由规则
$routes = [
'GET' => [
'/' => 'HomeController@index',
'/about' => 'AboutController@index',
],
'POST' => [
'/contact' => 'ContactController@store',
],
];
// 路由匹配
if (isset($routes[$requestMethod][$requestUri])) {
$handler = $routes[$requestMethod][$requestUri];
list($controller, $method) = explode('@', $handler);
call_user_func([new $controller, $method]);
} else {
header("HTTP/1.0 404 Not Found");
echo '404 Not Found';
}
使用框架内置路由系统
主流 PHP 框架如 Laravel、Symfony 等都提供了完善的路由系统。以 Laravel 为例:

// 基本路由定义
Route::get('/', function () {
return view('welcome');
});
// 控制器路由
Route::get('/user/{id}', 'UserController@show');
// 路由参数约束
Route::get('/post/{slug}', 'PostController@show')->where('slug', '[A-Za-z]+');
// 路由分组
Route::prefix('admin')->middleware('auth')->group(function () {
Route::get('/dashboard', 'AdminController@dashboard');
});
使用独立路由组件
对于非框架项目,可以使用独立路由组件如 FastRoute:
$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
$r->addRoute('GET', '/users', 'get_all_users_handler');
$r->addRoute('GET', '/user/{id:\d+}', 'get_user_handler');
$r->addRoute('POST', '/user/{id:\d+}', 'update_user_handler');
});
$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];
$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
case FastRoute\Dispatcher::NOT_FOUND:
// 处理 404
break;
case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
// 处理 405
break;
case FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
$vars = $routeInfo[2];
call_user_func($handler, $vars);
break;
}
实现 RESTful API 路由
设计符合 REST 规范的路由系统:

Route::resource('photos', 'PhotoController');
// 自动生成以下路由:
// GET /photos - index
// GET /photos/create - create
// POST /photos - store
// GET /photos/{photo} - show
// GET /photos/{photo}/edit - edit
// PUT/PATCH /photos/{photo} - update
// DELETE /photos/{photo} - destroy
路由缓存优化
对于生产环境,可以缓存路由以提高性能:
// Laravel 路由缓存
php artisan route:cache
// 清除路由缓存
php artisan route:clear
动态路由加载
实现按需加载路由配置,适用于模块化开发:
// 加载模块路由
foreach (glob(__DIR__.'/modules/*/routes.php') as $file) {
require $file;
}
每种实现方式都有其适用场景,原生实现适合小型项目,框架路由适合中大型应用,独立组件则在需要轻量级解决方案时很有用。路由系统的选择应考虑项目规模、性能需求和开发效率等因素。






