StartMVC开发手册

可以快速上手的开发文档

手册目录

路由

路由

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

路由配置(支持多种方式)

按优先级处理路由规则(正则 > 内置模式 > 普通匹配)

普通字符串匹配

['about', 'home/page/about'],

内置简单路由模式:

//简便方法
//(:any)代表任意字符
//(:num)代表纯数字
//(:alpha)代表纯字母
//(:alphanum)代表字母+alphanum
return
[
  ['(:any)','home/$1'],//隐藏home模块url(适用于单模块)
  ['article_(:num)','article/detail/$1'], //格式为/article_232.html
  ['category/(:num)','category/index/$1'],//格式为/category/232.html
  ['tag/(:any)','tag/$1'],//格式为/tag/中国.html
  ['user/(:alphanum)/profile', 'user/profile/view/$1'],
  ['api/users/(:num)', 'api/user/get/$1'] //REST风格路由
];

自定义正则表达式路由:
配置的原理其实就是正则替换,它返回一个数组,每个数组元素就是一条规则。这个数组由两个元素组成,第一个是路由改写后的URL正则表达式,第二个是路由需要改写的原URL。

// config/route.php
return
[
  ['/^about$/', 'home/index/about'],    // about 等于 home/index/about
  ['/^article\/(\d+)$/', 'home/index/article/$1']    // article/2 等于 home/index/article/2
  ['/^category\/(.*?)$/','home/category/index/$1'],
  ['/^about$/', 'home/index/about'],
  ['/^column\/(\d+)$/', 'home/index/column/$1']
  
  // 匹配 article/123 到 home/index/article/123
  ['/^article\/(\d+)$/', 'home/index/article/$1']
  // 匹配 blog/tech/456 到 blog/post/view/tech/456
  ['/^blog\/(\w+)\/(\d+)$/', 'blog/post/view/$1/$2']

];

// 基本路由


Router::get('/', 'HomeController@index');
Router::post('/login', 'AuthController@login');

// 带参数的路由


Router::get('/user/:id', 'UserController@show');
Router::get('/posts/:slug', 'PostController@show');

// 路由组


Router::group('/admin', function() {
    Router::get('/', 'AdminController@dashboard');
    Router::get('/users', 'AdminController@users');
});

// 带中间件的路由组


Router::group(['prefix' => '/api', 'middleware' => ['ApiAuth']], function() {
    Router::get('/users', 'ApiController@getUsers');
    Router::post('/users', 'ApiController@createUser');
});

// RESTful资源路由


Router::resource('products', 'ProductController');

// 使用闭包的路由

Router::get('/welcome', function() {
    return '欢迎使用StartMVC框架!';
});

// 使用中间件的路由定义


Router::get('/admin/dashboard', 'AdminController@dashboard', ['auth']);
Router::post('/api/users', 'ApiController@createUser', ['auth', 'throttle:60,1']);

// 使用路由组批量应用中间件

Router::group(['middleware' => ['auth']], function() {
    Router::get('/admin/users', 'AdminController@users');
    Router::get('/admin/settings', 'AdminController@settings');
});