ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 路由分组 相信通过前面几篇的学习,你已经掌握了基本的路由用法,本篇内容要讲解的路由分组的引入是为了简化路由规则的定义,以及提高路由的解析性能而设计的。 下面就来揭开分组的神秘面纱吧。 #### 分组定义 在实际的使用中,会涉及到大量的相同URL前缀的路由规则,例如下面的一组路由: ~~~ Route::get('blog/:year/:month','blog/archive',['ext'=>'html'],['year'=>'\d{4}','month'=>'\d{2}']); Route::get('blog/:cate','blog/index',['ext'=>'html'],['cate'=>'[a-zA-Z]+']); Route::get('blog/:id','blog/read',['ext'=>'html'],['id'=>'\d+']); Route::get('blog','blog/index',['ext'=>'html']); ~~~ 除了定义起来略显麻烦之外,而且在匹配路由的时候也会整个遍历,通过路由分组可以简化为: ~~~ Route::group('blog', [ ':year/:month' => 'blog/archive', ':cate' => 'blog/index', ':id' => 'blog/read', '/' => 'blog/index', ],['ext'=>'html'],['year'=>'\d{4}','month'=>'\d{2}','cate'=>'[a-zA-Z]+','id'=>'\d+']); ~~~ 当然,也可以使用闭包方式定义: ~~~ Route::group('blog', function(){ Route::get(':year/:month','blog/archive'); Route::get(':cate','blog/index'); Route::get(':id','blog/read'); Route::get('/','blog/index'); },['ext'=>'html'],['year'=>'\d{4}','month'=>'\d{2}','cate'=>'[a-zA-Z]+','id'=>'\d+']); ~~~ 分组本身没有请求类型的限制,也就是说分组对所有请求类型都是有效的,对请求类型有限制的是分组下面的路由规则本身。 【5.1须知】 5.1可以使用下面的方式更清晰注册 ~~~ Route::group('blog', function(){ Route::get(':year/:month','blog/archive'); Route::get(':cate','blog/index'); Route::get(':id','blog/read'); Route::get('/','blog/index'); })->ext('html') ->pattern(['year'=>'\d{4}','month'=>'\d{2}','cate'=>'[a-zA-Z]+','id'=>'\d+']); ~~~ 路由分组在执行路由匹配的时候,首先会匹配URL地址是否为分组名开头,如果符合才会进行分组下面的路由匹配。 当然,分组远不止这么简单,下面我们会陆续领略到分组的强大。 #### 路由地址前缀 可以给分组的路由地址定义一个统一的前缀 ~~~ Route::group('blog', [ ':year/:month' => ['archive', ['method'=>'get']], ':cate' => 'index', ':id' => 'read', ],['ext'=>'html','prefix'=>'index/blog/'],['year'=>'\d{4}','month'=>'\d{2}','cate'=>'[a-zA-Z]+','id'=>'\d+']); ~~~ 使用`prefix路由参数`统一配置路由地址的前缀,可以简化分组的路由地址的定义。 #### 小结 路由分组的定义格式 > Route::group('分组名或分组参数','分组路由规则','公共路由参数','公共变量规则'); group方法的第一个参数为字符串表示分组名,如果是数组就表示该分组的公共路由参数。