6路由参数
未知
2021-07-04 10:20:09
0

路由参数

路由分组及规则定义支持指定路由参数,这些参数主要完成路由匹配检测以及后续行为。

路由参数可以在定义路由规则的时候直接传入(批量),推荐使用方法配置更加清晰。

参数 说明 方法名
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

用法举例:

Route::get('new/:id', 'News/read')
    ->ext('html')
    ->https();
复制

这些路由参数可以混合使用,只要有任何一条参数检查不通过,当前路由就不会生效,继续检测后面的路由规则。

如果你需要批量设置路由参数,也可以使用option方法。

Route::get('new/:id', 'News/read')
    ->option([
        'ext'   => 'html',
        'https' => true
    ]);
复制

URL后缀

URL后缀如果是全局统一的话,可以在路由配置文件中设置url_html_suffix参数,如果当前访问的URL地址中的URL后缀是允许的伪静态后缀,那么后缀本身是不会被作为参数值传入的。

不同参数设置的区别如下:

配置值 描述
false 禁止伪静态访问
空字符串 允许任意伪静态后缀
html 只允许设置的伪静态后缀
html|htm 允许多个伪静态后缀
// 定义GET请求路由规则 并设置URL后缀为html的时候有效
Route::get('new/:id', 'News/read')
    ->ext('html');
复制

支持匹配多个后缀,例如:

Route::get('new/:id', 'News/read')
    ->ext('shtml|html');
复制

如果ext方法不传入任何值,表示不允许使用任何后缀访问。

可以设置禁止访问的URL后缀,例如:

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

如果denyExt方法不传入任何值,表示必须使用后缀访问。

域名检测

支持使用完整域名或者子域名进行检测,例如:

// 完整域名检测 只在news.thinkphp.cn访问时路由有效
Route::get('new/:id', 'News/read')
    ->domain('news.thinkphp.cn');
// 子域名检测
Route::get('new/:id', 'News/read')
    ->domain('news');
复制

如果需要给子域名定义批量的路由规则,建议使用domain方法进行路由定义。

HTTPS检测

支持检测当前是否HTTPS访问

// 必须使用HTTPS访问
Route::get('new/:id', 'News/read')
    ->https();
复制

AJAX/PJAX/JSON检测

可以检测当前是否为AJAX/PJAX/JSON请求。

// 必须是JSON请求访问
Route::get('new/:id', 'News/read')
    ->json();
复制

请求变量检测

可以在匹配路由地址之外,额外检查请求变量是否匹配,只有指定的请求变量也一致的情况下才能匹配该路由。

// 检查type变量
Route::post('new/:id', 'News/save')
    ->filter('type', 1);   
    
// 检查多个请求变量
Route::post('new/:id', 'News/save')
    ->filter([ 'type' => 1,'status'=> 1 ]);       
复制

追加额外参数

可以在定义路由的时候隐式追加额外的参数,这些参数不会出现在URL地址中。

Route::get('blog/:id', 'Blog/read')
    ->append(['app_id' => 1, 'status' => 1]);
复制

在路由请求的时候会同时传入app_idstatus两个参数。

路由绑定模型

路由规则和分组支持绑定模型数据,例如:

Route::get('hello/:id', 'index/hello')
    ->model('id', '\app\index\model\User');
复制

会自动给当前路由绑定 id为 当前路由变量值的User模型数据。

如果你的模型绑定使用的是id作为查询条件的话,还可以简化成下面的方式

Route::get('hello/:id', 'index/hello')
    ->model('\app\index\model\User');
复制

默认情况下,如果没有查询到模型数据,则会抛出异常,如果不希望抛出异常,可以使用

Route::rule('hello/:id', 'index/hello')
    ->model('id', '\app\index\model\User', false);
复制

可以定义模型数据的查询条件,例如:

Route::rule('hello/:name/:id', 'index/hello')
    ->model('id&name', '\app\index\model\User');
复制

表示查询idname的值等于当前路由变量的模型数据。

也可以使用闭包来自定义返回需要的模型对象

Route::rule('hello/:id', 'index/hello')
    ->model(function ($id) {
        $model = new \app\index\model\User;
        return $model->where('id', $id)->find();
    });
复制

闭包函数的参数就是当前请求的URL变量信息。

绑定的模型可以直接在控制器的架构方法或者操作方法中自动注入,具体可以参考请求章节的依赖注入。

请求缓存

可以对当前的路由请求进行请求缓存处理,例如:

Route::get('new/:name$', 'News/read')
    ->cache(3600);
复制

表示对当前路由请求缓存3600秒,更多内容可以参考请求缓存一节。

动态参数

如果你需要额外自定义一些路由参数,可以使用下面的方式:

Route::get('new/:name$', 'News/read')
    ->option('rule','admin');
复制

或者使用动态方法

Route::get('new/:name$', 'News/read')
    ->rule('admin');
复制

在后续的路由行为后可以调用该路由的rule参数来进行权限检查。

上一篇:6路由地址

下一篇:6路由中间件

相关内容

MySQL变量定义与初始化
MySQL变量分为系统变量和用户定义变量,用于存储数据和配置参数。...
2024-11-20 19:00:42
如何使用MySQL变量进行...
本文详细介绍了MySQL中用户定义变量、系统变量和局部变量的使用方...
2024-11-20 18:46:45
动态分配MySQL变量的示...
MySQL中,变量用于存储临时数据,包括全局和会话变量以及用户定义...
2024-11-20 18:23:38
拼多多购物优惠券,优惠力度...
拼多多购物优惠券种类多,优惠力度大,可省下不少钱。可通过平台活动、...
2024-11-20 12:00:43
PHP SQLSRV数据库...
本文介绍了使用PHP SQLSRV扩展进行数据库操作的示例,包括连...
2024-11-20 10:23:47
MySQL排序操作的效率优...
摘要:MySQL排序操作效率影响数据库性能,可通过使用索引、优化查...
2024-11-20 00:23:35

热门资讯

tp6开发规范 命名规范 请理解并尽量遵循以下命名规范,可以减少在开发过程中出现不必要的错误。 ThinkPHP6....
6高级查询 快捷查询 快捷查询方式是 一种多字段相同查询条件 的简化写法,可以进一步简化查询条件的写法,在多个字...
tp6多应用提示控制器不存在:... 第一个情况是没有使用composer安装扩展。 如果要使用多应用模式, 你需要win+r,cmd指针...
6配置 配置目录 单应用模式 对于单应用模式来说,配置文件和目录很简单,根目录下的 config 目录下面就...
6异常处理 和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面。 异...
6swoole 本篇内容主要讲述了最新的 think-swoole 扩展的使用。目前仅支持Linux环境或者MacO...
6助手函数 助手函数 系统为一些常用的操作方法封装了助手函数,便于使用,包含如下: 助手函数 描述 abort ...
6查询表达式 查询表达式 查询表达式支持大部分的SQL查询语法,也是 ThinkPHP 查询语言的精髓,查询表达式...
6路由参数 路由参数 路由分组及规则定义支持指定路由参数,这些参数主要完成路由匹配检测以及后续行为。 路由参数可...
6查询 模型查询和数据库查询方法的区别主要在于,模型中的查询的数据在获取的时候会经过获取器的处理,以及更加对...