路由闭包
我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如:
Route::get('read',function (){
return 'www.qipa250.com';
});

参数传递
闭包定义的时候支持参数传递,例如:
Route::get('read/:city', function ($city) {
return 'Welcome to '.$city;
});
http://mac.tp6.com/read/beijing

传递多个参数,规则路由中定义的动态变量的名称 就是闭包函数中的参数名称,不分次序。
Route::get('member/:name/:age', function ($age,$name) {
return ' name='.$name.',age='.$age;
});
http://mac.tp6.com/member/qipa/250

路由参数
路由分组及规则定义支持指定路由参数,这些参数主要完成路由匹配检测以及后续行为。
路由参数可以在定义路由规则的时候直接传入(批量),推荐使用方法配置更加清晰。
| 参数 | 说明 | 方法名 |
|---|---|---|
| ext | URL后缀检测,支持匹配多个后缀 | ext |
| deny_ext | URL禁止后缀检测,支持匹配多个后缀 | denyExt |
| https | 检测是否https请求 | https |
| domain | 域名检测 | domain |
| complete_match | 是否完整匹配路由 | completeMatch |
| model | 绑定模型 | model |
| cache | 请求缓存 | cache |
| ajax | Ajax检测 | ajax |
| pjax | Pjax检测 | pjax |
| json | JSON检测 | json |
| validate | 绑定验证器类进行数据验证 | validate |
| append | 追加额外的参数 | append |
| middleware | 注册路由中间件 | middleware |
| filter | 请求变量过滤 | filter |
qipa控制器代码
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Request;
class Qipa extends BaseController
{
public function index()
{
return '我是奇葩控制器';
}
public function hello($name = 'ThinkPHP6')
{
return 'hello,' . $name;
}
public function read($id)
{
echo 'www.qipa250.com-read-id=' . $id;
}
public function read2()
{
echo url('read_info',['id'=>250]);
echo '<br>';
echo url('qipa/read',['id'=>888]);
}
public function readbook()
{
halt(Request::param());
}
public function qiparead()
{
echo 'www.qipa250.com-qiparead-id=' . $_GET['id'];
}
}
路由参数限制后缀为html结尾
Route::get('read/:id', 'qipa/read')
->ext('html');
若是不加html,访问则报错:

加上后缀html,则不报错

这些路由参数可以混合使用,只要有任何一条参数检查不通过,当前路由就不会生效,继续检测后面的路由规则。
如果你需要批量设置路由参数,也可以使用option方法。
Route::get('read/:id', 'qipa/read')
->option([
'ext'=>'html|htm',
'https'=>false,
]);
http://mac.tp6.com/read/250.htm

http://mac.tp6.com/read/250.html

其他后缀则报错

URL后缀
URL后缀如果是全局统一的话,可以在路由配置文件中设置url_html_suffix参数,如果当前访问的URL地址中的URL后缀是允许的伪静态后缀,那么后缀本身是不会被作为参数值传入的。
不同参数设置的区别如下:
| 配置值 | 描述 |
|---|---|
| false | 禁止伪静态访问 |
| 空字符串 | 允许任意伪静态后缀 |
| html | 只允许设置的伪静态后缀 |
| html | htm |
如果ext方法不传入任何值,表示不允许使用任何后缀访问。
Route::get('read/:id', 'qipa/read')->ext();
访问http://mac.tp6.com/read/250.html

去掉后缀

可以设置禁止访问的URL后缀,例如:
// 定义GET请求路由规则 并设置禁止URL后缀为png、jpg和gif的访问
Route::get('read/:id', 'qipa/read')
->denyExt('jpg|png|gif');


除了被禁止的后缀,其他都可以访问


当然php不行

如果denyExt方法不传入任何值,表示必须使用后缀访问。
// 定义GET请求路由规则 并设置禁止URL后缀为png、jpg和gif的访问
Route::get('read/:id', 'qipa/read')
->denyExt();

http://mac.tp6.com/read/250.shtml

域名检测
Route::get('read/:id', 'qipa/read')
->domain('mac.tp6.com');

若是修改域名
Route::get('read/:id', 'qipa/read')
->domain('www.tp6.com');
就会报错,检测域名失败

子域名检测
Route::get('read/:id', 'qipa/read')
->domain('mac');

若是修改为new
Route::get('read/:id', 'qipa/read')
->domain('new');
访问就会报错,子域名不匹配

HTTPS检测
Route::get('read/:id', 'qipa/read')
->https();
支持检测当前是否HTTPS访问

请求缓存
可以对当前的路由请求进行请求缓存处理,例如:
Route::get('read/:id', 'qipa/read')->cache(3600);
表示对当前路由请求缓存3600秒
动态参数
如果你需要额外自定义一些路由参数,可以使用下面的方式:
Route::get('new/:name$', 'News/read')
->option('rule','admin');
或者使用动态方法
Route::get('new/:name$', 'News/read')
->rule('admin');
在后续的路由行为后可以调用该路由的rule参数来进行权限检查。
中间件
Route::get('read/:name', 'qipa/readbook')->middleware('app\middleware\Check');
新建中间件

<?php
namespace app\middleware;
/**
* 应用服务类
*/
class Check
{
public function handle($request, \Closure $next)
{
echo '得到name=' . $request->param('name') . '<br>';
if ($request->param('name') == 'qipa250') {
echo '你好我是奇葩250';
} else {
echo '你好我不是奇葩250';
}
echo '<br>';
echo '走到app\middleware\Check类的handle方法了';
return $next($request);
}
}
http://mac.tp6.com/read/250

http://mac.tp6.com/read/qipa250

可以看到,先执行了中间件的业务程序,然后再执行qipa控制器中的readbook方法

本文详细介绍了ThinkPHP6中的路由使用,包括路由闭包定义,参数传递,路由参数,URL后缀管理,域名与HTTPS检测,请求缓存,动态参数的设置以及中间件的运用。通过实例展示了如何配置和使用这些功能,以实现更灵活的路由控制。
2543

被折叠的 条评论
为什么被折叠?



