如何在简单PHP文件中无需引入即可像Laravel的web.php一样使用类方法
实现类似Laravel中全局可用Route类的方法
核心逻辑:Laravel里能直接在
routes/web.php用Route::get(),本质是提前把Route类加载到全局环境,同时用静态方法简化调用。自己搭小型MVC框架不用搞复杂的门面模式,用最直白的方式就能实现。第一步:编写基础Route类
先实现一个能注册、匹配路由的Route类,示例代码:class Route { private static $routes = []; // 注册GET请求路由 public static function get($uri, $action) { self::$routes['GET'][$uri] = $action; } // 注册POST请求路由 public static function post($uri, $action) { self::$routes['POST'][$uri] = $action; } // 匹配当前请求并执行对应逻辑 public static function dispatch() { $requestMethod = $_SERVER['REQUEST_METHOD']; $requestUri = $_SERVER['REQUEST_URI']; if (isset(self::$routes[$requestMethod][$requestUri])) { $action = self::$routes[$requestMethod][$requestUri]; // 兼容闭包和控制器@方法两种写法 if (is_callable($action)) { call_user_func($action); } elseif (strpos($action, '@') !== false) { list($controllerName, $methodName) = explode('@', $action); $controller = new $controllerName(); $controller->$methodName(); } } else { http_response_code(404); echo '404 页面不存在'; } } }第二步:全局加载Route类
在框架的入口文件(比如index.php)里,先引入Route类,再加载路由文件,最后执行路由匹配:// index.php // 引入Route类文件 require_once './core/Route.php'; // 加载路由定义文件 require_once './routes/web.php'; // 匹配并执行路由 Route::dispatch();第三步:在路由文件里直接使用
现在routes/web.php里就可以像Laravel那样写路由了:// routes/web.php Route::get('/', function() { echo '首页'; }); Route::get('/about', 'AboutController@show');可选优化
- 嫌
Route::麻烦的话,可以封装全局函数:
之后路由文件里直接写// 在入口文件里添加这些函数 function get($uri, $action) { Route::get($uri, $action); } function post($uri, $action) { Route::post($uri, $action); }get('/', function() { ... });即可 - 还可以扩展Route类,增加PUT、DELETE等请求方法的支持,或者添加中间件功能。
- 嫌
内容的提问来源于stack exchange,提问作者mohsin
相关产品推荐
相关产品推荐

