配置文件路由
配置文件路由是在 config/route/route.php 中通过 Router 门面手动注册路由的方式。适合需要集中管控路由定义的场景。
基础用法
注册路由
php
// config/route/route.php
use Viswoole\Router\Facade\Router;
// GET 请求
Router::get('/user/list', [UserController::class, 'list']);
// POST 请求
Router::post('/user/create', [UserController::class, 'create']);
// PUT 请求
Router::put('/user/update', [UserController::class, 'update']);
// DELETE 请求
Router::delete('/user/delete', [UserController::class, 'delete']);
// 支持多种 HTTP 方法
Router::patch('/user/patch', [UserController::class, 'patch']);
Router::options('/user/options', [UserController::class, 'options']);闭包处理器
路由处理器可以是闭包,适用于轻量级逻辑:
php
Router::get('/ping', function () {
return ['code' => 0, 'message' => 'pong'];
});
// 支持依赖注入
Router::get('/time', function (Request $request) {
return ['timestamp' => time(), 'path' => $request->path()];
});多方法注册
使用 any 一次性注册匹配所有 HTTP 方法:
php
// 匹配所有方法
Router::any('/user/all', [UserController::class, 'handleAll']);动态参数
必选参数
路径中使用 {参数名} 声明必选参数:
php
Router::get('/user/{id}', [UserController::class, 'detail']);
// /user/1024 → $id = 1024
// /user/ → 404(缺少必选参数)通过 patterns 约束参数格式:
php
Router::get('/user/{id}', [UserController::class, 'detail'])
->patterns(['id' => '\d+']); // id 必须为数字可选参数
使用 {参数名?} 声明可选参数,默认值由控制器方法参数默认值决定:
php
Router::get('/user/{id?}', [UserController::class, 'detail']);
// 控制器中指定默认值
public function detail(int $id = 0): array {}
// /user/ → $id = 0
// /user/1024 → $id = 1024多参数组合
php
Router::get('/article/{category}/{id}', [ArticleController::class, 'show'])
->patterns([
'category' => '[a-z]+',
'id' => '\d+',
]);
// /article/php/42 → $category = 'php', $id = 42路由属性
设置中间件
php
Router::get('/admin/dashboard', [AdminController::class, 'dashboard'])
->setMiddlewares([AuthMiddleware::class, AdminMiddleware::class]);设置域名限制
php
Router::get('/api/version', [ApiController::class, 'version'])
->setDomain('api.example.com');设置后缀
php
Router::get('/about', [PageController::class, 'about'])
->setSuffix('html');
// 访问 /about.html 才能匹配未命中路由(Miss)
当所有路由均未匹配时,执行 miss 回调(仅接受闭包):
php
Router::miss(function () {
return ['code' => 404, 'message' => 'Not Found'];
});
// 如需调用控制器方法,在闭包中转发
Router::miss(function () {
return ErrorController::notFound();
});完整示例
php
<?php
// config/route/route.php
use App\Controller\UserController;
use App\Middleware\AuthMiddleware;
use Viswoole\Router\Facade\Router;
// 用户模块 - 带认证中间件
Router::group('/api/v1/user', function () {
Router::get('/info', [UserController::class, 'info'])
->setMiddlewares([AuthMiddleware::class]);
Router::post('/create', [UserController::class, 'create'])
->setMiddlewares([AuthMiddleware::class]);
Router::get('/{id}', [UserController::class, 'detail'])
->patterns(['id' => '\d+']);
}, 'api.v1.user')->setMiddlewares([RateLimitMiddleware::class]);
// 首页
Router::get('/', [HomeController::class, 'index']);
// 404 兜底
Router::miss(function () {
return ['code' => 404, 'message' => '页面不存在'];
});