StartMVC开发手册

可以快速上手的开发文档

手册目录

路由

路由

StartMVC的默认路由都是自动的,系统会根据URL自动载入指定的模块、控制器和操作方法,并传入参数。如果路由不做配置,系统会调用默认路由方式。

自定义路由统一在 config/route.php 中定义,支持流式API(推荐)和数组配置两种写法,可混用,进入同一张路由表。路由按优先级处理规则为:精确匹配 > 正则路由 > 内置模式。URL后缀(如 .html)在匹配前自动剥离,规则中无需写后缀。

// 一、流式API(推荐):action写法为 '模块/控制器/方法',方法自动加 Action 后缀
Router::get('/', 'Home/Index/index');
Router::post('/login', 'Home/User/login');
Router::put('/user/:id', 'Home/User/update'); // 另有 post/put/patch/delete/any

// 带参数的路由,内置占位符 :id :num :slug :alpha :alphanum :any
Router::get('/user/:id', 'Home/User/show');
Router::get('/posts/:slug', 'Home/Post/show');

// 自定义占位符
Router::pattern(':date', '(\d{4}-\d{2}-\d{2})');
Router::get('/archive/:date', 'Home/Post/archive');
// 路由组:字符串前缀写法
Router::group('admin', function() {
 Router::get('/', 'Admin/Index/index'); // /admin
 Router::get('/users', 'Admin/User/index'); // /admin/users
});

// 路由组:统一前缀 + 路由级中间件(中间件可用 config/middleware.php 中的别名或完整类名)
Router::group(['prefix' => 'api', 'middleware' => ['auth']], function() {
 Router::get('/users', 'Api/User/index'); // /api/users,应用 auth 中间件
});

// 单条路由应用中间件,数组形式可传多个,按序执行;组内路由自动继承组中间件
Router::get('/admin/dashboard', 'Admin/Index/dashboard', ['log']);
// RESTful资源路由:一行生成7条路由,对应 Article 控制器的
// index / create / store / show / edit / update / destroy 方法
Router::resource('/article', 'Home/Article');

// 闭包路由,匹配参数按序传入
Router::get('/welcome/:name', function($name) {
 return '欢迎使用StartMVC框架,' . $name;
});

//多文件路由
// config/route.php 末尾,用户自行拆分
require __DIR__ . '/route-admin.php';
require __DIR__ . '/route-api.php';

二、数组配置(兼容旧版):支持简便占位符 (:num)、(:any)、(:alpha)、(:alnum) 和原生正则两种写法,目标中的 $1、$2 会被替换为匹配参数:

return [
 ['about', 'home/index/about'], // 精确匹配 about
 ['article/(:num)', 'home/article/detail/$1'], // /article/232
 ['/^blog\/(\w+)\/(\d+)$/', 'home/blog/view/$1/$2'], // /blog/tech/232
];

URL与控制器及方法的映射关系

控制器名和方法名会自动转换:URL中的横线和下划线,控制器转为大驼峰(如 user-profileUserProfileController),方法转为小驼峰并自动加 Action 后缀(如 blog-postblogPostAction())。