php 路由功能,增强路由功能 · ThinkPHP 5 简明开发手册 · 看云

新版的路由经过重新设计,功能大为增强,主要特性有:

## 动态注册路由

除了在路由配置文件中定义,现在可以通过\Think\Route类的静态方法注册路由。

最关键的方法是register方法,用法如下:

~~~

// 除了路由规则和路由地址外,其他都是可选

\Think\Route::register('路由规则','路由地址'[,'请求类型','路由参数','变量规则']);

~~~

如果没有传入请求类型的话,默认的是任何请求类型都有效,可以指定其他请求类型:

~~~

\Think\Route::register('new/:id','New/update','POST');

~~~

如果要定义get和post请求支持的路由规则,也可以用:

~~~

\Think\Route::register('new/:id','New/read','GET|POST');

~~~

请求类型包括:

|类型|描述|

|---|---|

|GET| 表示GET请求|

|POST| 表示POST请求|

|PUT| 表示PUT请求|

|DELETE |表示DELETE请求|

|* |表示任何请求类型|

系统提供了不同的请求类型简化方法,例如:

~~~

// 定义GET请求路由规则

\Think\Route::get('路由规则','路由地址','路由参数','变量规则');

// 定义POST请求路由规则

\Think\Route::post('路由规则','路由地址','路由参数','变量规则');

// 定义PUT请求路由规则

\Think\Route::put('路由规则','路由地址','路由参数','变量规则');

// 定义DELETE请求路由规则

\Think\Route::delete('路由规则','路由地址','路由参数','变量规则');

// 所有请求都支持的路由规则

\Think\Route::any('路由规则','路由地址','路由参数','变量规则');

~~~

例如:

~~~

\Think\Route::get('new/:id','New/read'); // 定义GET请求路由规则

\Think\Route::post('new/:id','New/update'); // 定义POST请求路由规则

\Think\Route::put('new/:id','New/update'); // 定义PUT请求路由规则

\Think\Route::delete('new/:id','New/delete'); // 定义DELETE请求路由规则

\Think\Route::any('new/:id','New/read'); // 所有请求都支持的路由规则

~~~

## 闭包路由的增强

闭包路由可以进行路由劫持或者中断处理,如果返回的是一个数组,那么表示路由到数组表示的模块、控制器和操作继续进行,例如:

~~~

\Think\Route::get('new/:id',function($id){

// 这里进行必要的处理

// 返回路由信息

return ['index','new','read'];

}); // 定义GET请求路由规则

~~~

> 如果直接输出或者返回字符串变量的话,闭包方法执行后会终止执行后续的操作。

## 路由参数

路由参数主要用于验证当前的路由规则是否有效,支持请求类型(method)、URL后缀(ext)、HTTPS请求(https)以及自定义检测机制(callback),使用方法:

~~~

// 定义GET请求路由规则 并设置URL后缀为html的时候有效

\Think\Route::get('new/:id','New/read',['ext'=>'html']);

~~~

## 变量规则

ThinkPHP5.0支持在规则路由中为变量用正则的方式指定变量规则,弥补了之前变量规则太局限的问题,并且支持全局规则设置。使用方式如下:

设置全局变量规则,全局路由有效:

~~~

// 设置name变量的正则规则

\Think\Route::pattern('name','\w+');

// 支持批量添加

\Think\Route::pattern(['name'=>'\w+','id'=>'\d+']);

~~~

局部变量规则,仅在当前路由有效:

~~~

// 定义GET请求路由规则 并设置name变量规则

\Think\Route::get('new/:id','New/read',[],['name'=>'\w+']);

~~~

如果一个变量同时定义了全局规则和局部规则,局部规则会覆盖全局变量的定义。

## 域名路由

可以给(子)域名或者IP指定路由规则,例如:

~~~

// blog.thinkphp.cn 路由到index模块的blog控制器

\Think\Route::domain('blog.thinkphp.cn','index/blog');

// admin.thinkphp.cn 路由到admin模块

\Think\Route::domain('admin.thinkphp.cn','admin');

~~~

## 路由分组

路由定义多了之后效率会变低,这个时候可以使用路由分组功能,把相同前缀的路由规则定义到一个分组,并且为分组定义相同的路由参数。

~~~

\Think\Route::group('new',[':id'=>'New/read',':name'=>'New/read'],'GET',['ext'=>'html'],['name'=>'\w+','id'=>'\d+']);

// 相当于同时注册以下路由

\Think\Route::register('new/:id','New/read','GET',['ext'=>'html'],['id'=>'\d+']);

\Think\Route::register('new/:name','New/read','GET',['ext'=>'html'],['name'=>'\w+']);

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值