路由

框架自带的路由组件,支持按url映射到文件的方式来执行相应的控制器,也支持定义路由路由配置。v2.7版本开始也支持第三方路由组件。除了旧版本自带的路由外也封装了FastRoute服务。有需要的话直接修改入口文件中相应的配置

框架是默认的路由组件是按url映射到文件的方式来执行相应的控制器,但是有一些情况下我们需要简短而优雅的网址便于用户记忆及SEO。这时候就需要使用url路由或者使用第三方的路由的服务。

配置章节我们介绍过,在Config目录下有route.php配置文件,我们的所有路由都配置在这个文件里,下面介绍方法及规则

相应接口

  1. <?php
  2. //应用路由配置文件
  3. use Cml\Route;
  4. //只针对get请求有效
  5. Route::get('pattern' , 'adminbase/System/Config/show');
  6. //v2.7+建议这么写效率更高且支持应用多级子目录
  7. Route::get('blog/bb/:aid\d', [
  8. 'root/adminbase',//应用名,支持多级子目录
  9. 'System/Config',//控制器,支持多级子目录
  10. 'show'//方法名
  11. ]);
  12. //只针对post请求有效
  13. Route::post('pattern' , 'adminbase/System/Config/update');
  14. //v2.7+建议这么写效率更高且支持应用多级子目录
  15. Route::post('blog/bb/:aid\d', [
  16. 'root/adminbase',//应用名,支持多级子目录
  17. 'System/Config',//控制器,支持多级子目录
  18. 'update'//方法名
  19. ]);
  20. //只针对put请求有效
  21. Route::put('pattern' , 'adminbase/System/Config/add');
  22. //v2.7+建议这么写效率更高且支持应用多级子目录
  23. Route::put('blog/bb/:aid\d', [
  24. 'root/adminbase',//应用名,支持多级子目录
  25. 'System/Config',//控制器,支持多级子目录
  26. 'add'//方法名
  27. ]);
  28. //只针对delete请求有效
  29. Route::delete('pattern' , 'adminbase/System/Config/delete');
  30. //v2.7+建议这么写效率更高且支持应用多级子目录
  31. Route::delete('blog/bb/:aid\d', [
  32. 'root/adminbase',//应用名,支持多级子目录
  33. 'System/Config',//控制器,支持多级子目录
  34. 'delete'//方法名
  35. ]);
  36. //只针对patch请求有效
  37. Route::patch('pattern', 'adminbase/System/Config/patch');
  38. //v2.7+建议这么写效率更高且支持应用多级子目录
  39. Route::patch('blog/bb/:aid\d', [
  40. 'root/adminbase',//应用名,支持多级子目录
  41. 'System/Config',//控制器,支持多级子目录
  42. 'patch'//方法名
  43. ]);
  44. //只针对所有请求都有效
  45. Route::any('pattern' , 'adminbase/System/Config/index');
  46. //v2.7+建议这么写效率更高且支持应用多级子目录
  47. Route::any('blog/bb/:aid\d', [
  48. 'root/adminbase',//应用名,支持多级子目录
  49. 'System/Config',//控制器,支持多级子目录
  50. 'index'//方法名
  51. ]);
  52. /**
  53. * RESTful 路由
  54. *
  55. * get 请求对应 adminbase/System/Config/getRead
  56. * post 请求对应 adminbase/System/Config/postRead
  57. * delete 请求对应 adminbase/System/Config/deleteRead
  58. * put 请求对应 adminbase/System/Config/putRead
  59. * patch 请求对应 adminbase/System/Config/patchRead
  60. */
  61. Route::rest('pattern' , 'adminbase/System/Config/read');
  62. //v2.7+建议这么写效率更高且支持应用多级子目录
  63. Route::any('blog/bb/:aid\d', [
  64. 'root/adminbase',//应用名,支持多级子目录
  65. 'System/Config',//控制器,支持多级子目录
  66. 'index'//方法名
  67. ]);

自带的路由pattern规则定义(第三方的路由请参考相对应的文档)

如我们配置了一条路由

  1. \Cml\Route::get('list/:id\d' => [
  2. 'web'
  3. 'Blog/Article',
  4. 'show'
  5. ]);
这条路由的意思为 当用户以GET请求访问 http://域名/list/1.html 这样的地址时,框架会执行的Article控制器的list方法。 \d为匹配数字 :id意思为它是一个动态参数 且在控制器中可使用\Cml\Http\Input::getInt('id')来接收在模板中可以使用 {{url "list/{$id}"}} 生成相应的url

分组路由

  1. use Cml\Route;
  2. Route::group('v1', function() {
  3. Route::get('user/add', 'api/User/add');
  4. Route::get('user/edit', 'api/User/edit');
  5. });

这边定义了 v1分组,即匹配 v1/user/add以及v1/user/edit这两个url

多应用单独定义路由

默认情况我们的路由是定义在全局projxx/Config/route.php中。但是如果我们有多个应用。

比如有webadminapi三个应用,然后我们想在web中定义自己的路由。这时候可以在web/Config/route.php中定义web独立的路由。然后在projxxx/Config/route.php中使用 Route::loadAppRoute('web'); 将其载入即可。

原文: http://doc.cmlphp.com/devintro/route/readme.html