thinkphp路由的完整匹配
Posted qikexun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp路由的完整匹配相关的知识,希望对你有一定的参考价值。
完整匹配
完整匹配
如果希望仅仅匹配
http://tp5.com/hello/thinkphp
而不能访问这种地址
http://tp5.com/hello/thinkphp/city/shanghai
就可以使用完整匹配功能,路由定义规则改为:
Route::get('hello/:name$','index/index/hello');
路由规则最后用$
结尾就表示该路由规则是完整匹配的。
(有部分情况下注册的路由规则是自动完整匹配的,比如说资源路由,我们后面会讲到。)
或者使用路由参数
Route::get('hello/:name','index/index/hello',['complete_match'=>true]);
两种方式的作用是相同的(实际上使用$结尾的路由定义最终也会解析成complete_match
参数的方式)。
【5.1须知】
可以使用下面的方法定义局部完整匹配
Route::get('hello/:name','index/index/hello')->completeMatch();
如果需要全局的路由规则定义都是完整匹配的话,可以直接修改应用的配置参数:
'route_complete_match' => true
当开启全局完整匹配后,个别路由规则也支持单独关闭完整匹配,使用下面的方式即可:
Route::get('hello/:name','index/index/hello',['complete_match'=>false]);
默认情况下,路由变量会匹配所有的字符,但很多时候,我们需要约束变量的规则进行路由匹配:
Route::get('hello/:name/[:city]','index/index/hello',[],[ 'name' => '[A-Za-z0-9]+' , 'city' => '[A-Za-z]+' ]);
分别对name和city变量定义了变量规则(采用正则表达式)。
【5.1须知】
可以使用下面的方法定义变量规则
Route::get('hello/:name/[:city]','index/index/hello')
->pattern(['name'=> '[A-Za-z0-9]+' , 'city' => '[A-Za-z]+' ]);
或者多次调用
Route::get('hello/:name/[:city]','index/index/hello')
->pattern('name','[A-Za-z0-9]+')
->pattern('city','[A-Za-z]+');
下面的URL地址会正确匹配
http://tp5.com/hello/thinkphp2015
http://tp5.com/hello/2015/beijing
下面的URL地址则无效
http://tp5.com/hello/think_php
http://tp5.com/hello/thinkphp/2015
以上是关于thinkphp路由的完整匹配的主要内容,如果未能解决你的问题,请参考以下文章