tp5 url使用php参数,「ThinkPHP5开发连载92」tp5路由-路由参数

上一篇文章讲解“路由 - 闭包支持”,本篇文章讲解“路由 - 路由参数”。

路由参数

路由分组及规则定义支持指定路由参数,这些参数主要完成路由匹配检测以及行为执行。5.1版本极大改进了路由参数的用法。

注意:1. 路由参数可以在定义路由规则的时候直接传入(批量),不过5.1采用了更加面向对象的方式进行路由参数配置,因此使用方法配置更加清晰。

路由参数表:

f11038e83bdd1d14cf2c08fcee2544cb.png

注意:1. ext和deny_ext参数允许设置为空,分别表示不允许任何后缀以及必须使用后缀访问。2. V5.1.6+版本开始,路由的before行为参数建议改为使用路由中间件替代。

1. 路由参数

①新建Index控制器,并新建paramFun方法:

1496882faafaf41e89fe620197356fa6.png

②设置paramFun方法的路由参数

42b2e76a9019f26230462292c42c5f53.png

预览:

e6d08c9b9ab35cf90029f35e7340eb13.png

以上方式与使用方法设置(新版推荐的设置方式)等效:

cd41830b68e8f52afaf97adf179029b2.png

预览:

ea8df61d4342a8384c5385bc557d459e.png

注意:1. 显然第二种方式更加直观,而且便于IDE的自动提示。2. 这些路由参数可以混合使用,只要有任何一条参数检查不通过,当前路由就不会生效,继续检测后面的路由规则。

2. URL后缀

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

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

bce662db81ddb27024c8737da0c613c7.png

1)URL后缀的基本使用

①在Index控制器中,新建urlFun方法

632989d5cc5a800060fd1cee676666ff.png

②设置urlFun方法的路由

7cdc2c09ba8ba0225ad0cd652beadc88.png

预览:

a3869bea458635020b63b28d56c7bde8.png

2)匹配多个后缀

重新设置urlFun方法的路由,设置可以匹配多个后缀:

783d074f241540704dfaa8b920f70484.png

预览:

a3869bea458635020b63b28d56c7bde8.png

a28a49328de47627c60099a25f05590c.png

3)禁止访问的URL后缀

重新设置urlFun方法的路由,设置禁止访问的URL后缀:

614786241936a644c53e0ccc46e1acc4.png

预览:

36fa9faa78a68eb6ac91a4f90edde076.png

63a84ee6032913da0958624cded7ae66.png

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

3. 域名检测

支持使用完整域名或者子域名进行检测。

1)完整域名检测

①在Index控制器中,新建domainFun方法

0ca5f1fe4794084b0ec6a51353e9ff37.png

②设置domainFun方法的路由,进行域名检测

610ad1c2d5423c31c245f70e4f84a61d.png

预览:

b44078862f7bba9a0cc94c55e094286d.png

③修改domainFun方法的路由,域名检测的域名设置为其他的域名,测试是否能访问

预览:

db0ca651c83ba8e87cf788ac74f74e37.png

注意:1. 由于未设置虚拟域名,因此使用的是localhost,可以设置虚拟域名进行测试。

2)子域名检测

有子域名的域名可以进行子域名检测。

二级域名、三级域名统称为子域名。

9972195069b5dd4b21f64a7acc57a5dc.png

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

4. HTTPS检测

支持检测当前是否HTTPS访问。

1)HTTPS检测——必须使用HTTPS访问

①在Index控制器中,新建httpsFun方法

21de9b5aab4edad2b2addd3c137e9ae1.png

②设置httpsFun方法的路由,进行https检测

99daba1c701bcff59887c061a84aace2.png

预览:

2741466e6e0a92158d24f7042c2a2e57.png

2)HTTPS检测——必须使用HTTP访问

修改httpsFun方法的路由,使用http访问:

7a07020ab126a476ee55a5822f50ca17.png

预览:

deffc14779909ac61f09b4eed358f0d8.png

5. 前置行为检测

支持使用行为对路由进行检测是否匹配,如果行为方法返回false表示当前路由规则无效。

①在Index控制器中,新建beforeFun方法

56b74397d9eb7b9a894ba653869a37c6.png

②设置beforeFun方法的路由,进行前置行为检测

8a00e67e4c556dcad4e0bede1b188165.png

注意:1. 前置行为检测app\index\controller\Index为访问的控制器的命名空间加控制器名。2. 前置行为检测需要配合控制器中的run方法使用。

③在Index控制器中,新建run方法,配合前置行为检测路由使用

9c7b5798d53bdc465b47ac330143f91c.png

预览:

996be0c751912d5a9711d959d8b4441e.png

73f12559d6ec2fa3dbdbd5fc59470560.png

注意:1. 为了方便使用,设置了虚拟域名www.tp5.com2. 可以在run方法中自行写关于前置行为检测的判断。3. 可以同时使用多个行为进行检测,并且支持使用闭包。4. 因为前置行为的特殊性,在路由参数的有效性检查后,无论是否最终匹配该路由,都会进行前置行为检查(路由分组的话,会在匹配改分组后,再检查)。

6. 后置行为执行

注意:1. V5.1.6+版本开始建议使用中间件替代路由后置行为。

可以为某个路由或者某个分组路由定义后置行为执行,表示当路由匹配成功后,执行的行为。

①在Index控制器中,新建afterFun方法

70f06b88344c1c42ee5e90aae5e01cd2.png

②设置afterFun方法的路由,设置后置行为执行

534008a6b56dcc1e199bb6f5d8503c68.png

③后置行为执行也需要配合run方法

Index控制器下的run方法:

b76853623794564ed9baf4e96f4a6a88.png

预览:

620c21dbbbc7490f9187ade57a76b6a4.png

注意:1. 如果成功匹配到after/:id路由后,就会执行行为类的run方法,参数是路由地址,可以动态改变。同样,后置行为也支持传入闭包。2. 只要使用了前置或后置行为,其他不使用的路由,也会自动执行前置后置行为,这是个问题,官方暂未修复(V5.1.12)。

7. 合并额外参数

通常用于完整匹配的情况,如果有额外的参数则合并作为变量值。

①在Index控制器中,新建mergeFun方法

3c7199cc041d99d293c0c2c1797fe133.png

②设置mergeFun方法的路由,合并额外参数

4de22dc6803791ae4d5fe1ad4c81e6f3.png

预览:

568c682d80363f0971a5399e9c8182b4.png

注意:1. 正常访问:http://www.tp5.com/merge/tp/php后会被匹配到,并且name变量的值为tp/php。此时测试失败(V5.1.12)。

ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员

b05fe753c70e68c3bd51d660c6ab185e.gif

关注卓象程序员,定期发布技术文章

下一篇讲解“路由 - 路由参数 - 设置Header信息”

b05fe753c70e68c3bd51d660c6ab185e.gif

3eaa6d40fb4c0fcf40de89994cc0cd1e.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值