TP5之路由study

路由是应用开发中比较关键的一个环节,其主要作用包括但不限于:
  • 让URL更规范以及优雅;
  • 隐式传入额外请求参数;
  • 统一拦截并进行权限检查等操作;
  • 绑定请求数据;
  • 使用请求缓存;
  • 路由中间件支持(V5.1.6版本以上!);
由于采用了路由规则的批量匹配检测算法,V5.1.6+版本开始,路由的解析性能大幅提升。
路由解析的过程一般包含:
  • 路由定义:完成路由规则的定义和参数设置;
  • 路由检测:检查当前的URL请求是否有匹配的路由;
  • 路由解析:解析当前路由实际对应的操作(方法或闭包);
  • 路由调度:执行路由解析的结果调度(主业务逻辑);
掌握路由主要是要掌握路由定义及参数设置,其它环节是由系统自动完成的。
路由的主体规划和定义:应该尽可能在应用开发前完成,在后期可以进行路由的参数调整和规则增补。
    路由仅针对[  PATH_INFO  ]方式的URL有效
ThinkPHP5.1的路由定义更加对象化,并且默认开启路由(不能关闭),如果一个URL没有定义路由,则采用
默认的PATH_INFO 模式访问URL:
http://serverName/index.php/module/controller/action/param/value/...
在不使用路由的情况下,仍然可以通过操作方法的参数绑定空控制器、空操作、等特性
实现URL地址的简化(可查看官方文档手册)。
Route类注册使用:think\facade\Route类静态调用。 facade :门面类(一种设计模式)

强制force路由

app.php配置文件中设置
'url_route_must' => true,
将开启强制使用路由,这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。
首页的路由规则采用/定义即可,例如下面把网站首页路由输出Hello,world!
Route::get('/', function () {
return 'Hello,world!';
});

延迟解析

如果你定义了太多的路由,担心影响性能,可以开启路由的延迟解析功能,只需要在app.php配置文件中设置:
// 开启路由延迟解析'url_lazy_route' => true,
尽量通过路由分组或者域名路由来定义路由才能发挥延迟解析的优势。
一旦开启路由的延迟解析,将会对定义的域名路由和分组路由进行延迟解析,也就是说只有实际匹配到该域名或者分组后才会进行路由规则的注册,避免不必要的注册和解析开销。
推荐的方式是开发模式下关闭延迟解析,部署后开启并生成路由映射缓存。
开启路由延迟解析后,将会导致你的URL生成无法准确识别路由规则的反解,但可以通过路由映射缓存指令(参考命令行章节的生成路由映射缓存一节)来解决。

路由规则合并解析(v5.1.6+)

V5.1.6+版本开始,路由规则支持合并解析,可以大大提升路由解析的性能。
可以在app.php文件中设置开启全局合并规则,
// 开启路由合并解析'route_rule_merge' => true,
或者在路由定义的时候对某个分组单独开启合并规则解析。
Route::group('', function () {
Route::rule('hello/:name','hello');
Route::rule('think/:name','think');
})->mergeRuleRegex();
这样该分组下的所有路由规则无论定义多少个都只需要匹配检查一次即可。

猜你喜欢

转载自www.cnblogs.com/lxlx2018done/p/9012660.html