thinkphp6路由闭包和参数详解

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

路由闭包

我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如:

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
在这里插入图片描述

路由参数

路由分组及规则定义支持指定路由参数,这些参数主要完成路由匹配检测以及后续行为。
路由参数可以在定义路由规则的时候直接传入(批量),推荐使用方法配置更加清晰。

参数说明方法名
extURL后缀检测,支持匹配多个后缀ext
deny_extURL禁止后缀检测,支持匹配多个后缀denyExt
https检测是否https请求https
domain域名检测domain
complete_match是否完整匹配路由completeMatch
model绑定模型model
cache请求缓存cache
ajaxAjax检测ajax
pjaxPjax检测pjax
jsonJSON检测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只允许设置的伪静态后缀
htmlhtm

如果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方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值