php 各种路由分析_ThinkPHP框架实战讲解-路由解读

本文详细介绍了ThinkPHP5.1版本中的路由特性,包括默认开启、不可关闭、优先匹配等原则。讲解了路由在SEO优化、请求参数处理、请求方式拦截等方面的作用。此外,还探讨了路由缓存、跨域支持、路由分组、闭包定义、资源路由、快捷路由、别名路由和域名路由等多种用法,强调了路由缓存对于性能提升的重要性。最后提到了MISS路由和资源路由的应用,并提醒注意路由规则的管理和404页面处理。
摘要由CSDN通过智能技术生成

路由是开发过程中比较重要的一环,在ThinkPHP5.1版本后路由默认开启,并且不可以关闭,足以可见它的重要性。下面我们来具体的说一下;

注意事项

1、默认开启、不可关闭;

2、优先匹配、多模式支持;

3、匹配成功,不再继续匹配;

4、默认支持数字、字母、下划线,不支持中文及特殊符号;

fb40898554bbb166df0b813e972c7baa.pngPHP

主要作用

1、URL链接更加规范、美观,更加适合SEO优化;

2、隐式传入额外请求参数;

3、请求方式拦截,区分GET、POST等请求方式;

4、绑定请求数据;

5、处理请求缓存,优化程序响应时间;

6、路由中间件支持(V5.1.6+版本以上支持);

18b64142a16e86aa8fe1f75d992db1be.pngSEO优化

路由定义

1、定义位置:route/route.php文件内,可以在route目录内多文件定义,最终框架会进行路由整合,建议采用域名+分组模式定义路由。

2、定义方式:

Route::get('new/:id','News/read');// 定义GET请求路由规则Route::post('new/:id','News/update');// 定义POST请求路由规则Route::put('new/:id','News/update');// 定义PUT请求路由规则Route::delete('new/:id','News/delete');// 定义DELETE请求路由规则Route::any('new/:id','News/read');// 所有请求都支持的路由规则

请注意:

1、路由匹配成功后,原链接访问方式会失效;

2、完全匹配需在尾部添加$;

3、变量可有可无使用[]包裹变量;

变量规则

系统默认的变量规则设置是\w+,只会匹配字母、数字和下划线字符,并不会匹配特殊符号和中文,需要定义变量规则或者调整默认变量规则。

1、局部配置(仅在当前路由有效)

*定义GET请求路由规则 并设置name变量规则

Route::get('new/:name','News/read')->pattern(['name'=>'\w+']);

2、全局配置(全部路由有效)

*设置name变量规则(采用正则定义)

Route::pattern('name','\w+');

*支持批量添加

Route::pattern(['name'=>'\w+','id'=>'\d+',]);

3、组合变量

*组合变量的优势是路由规则中没有固定的分隔符,可以随意组合需要的变量规则和分割符

Route::get('item--','product/detail')->pattern(['name'=>'\w+','id'=>'\d+']);

d2023cae5571e23d4e41f7e4287fb1ec.pngPHP框架

路由地址

e2565676b6a4c10ed993b6c9f3c3d7ed.png

闭包支持

实际开发过程中不常用,是一种简单直接的定义模式;

Route::rule('hello/:name',function(Request $request, $name){$method = $request->method();return'['. $method .'] Hello,'. $name;});

路由参数

d092574423c712d8f360c0505aa6dd55.png

e6c213262056cc4925090da0426c48cb.png互联网开发

路由缓存

在定义大量的路由时,强烈建议使用路由缓存,注意仅在部署模式下有效,开启该缓存可以明显提升路由解析性能。

开启方式,在应用配置文件app.php中设置开启:

'route_check_cache'=>true,

开启后,会自动对每次的路由请求的调度进行缓存,第二次如果是相同的请求则无需再次经过路由解析,而是直接进行请求调度。

清除命令:

>php think clear --route

跨域请求

如果某个路由或者分组需要支持跨域请求,可以使用如下代码:

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

注解路由

此方式不建议使用,缺点路由分散不方便管理,同时书写规则要求较为严格。

f59d11f2f059646e9c946ebd4b8c0d15.png代码

路由分组

强烈建议使用,下面书写一种比较完善的路由分组写法:

Route::group(['method'=>'get','ext'=>'html'],function(){Route::group('blog',function(){Route::rule('blog/:id','blog/read');Route::rule('blog/:name','blog/read');});})->pattern(['id'=>'\d+','name'=>'\w+']);

MISS路由

如果希望在没有匹配到所有的路由规则后执行一条设定的路由,可以注册一个单独的MISS路由,总结来说,可以应用于404页面,防止程序找不到路由而报错(一旦设置了MISS路由,相当于开启了强制路由模式);

Route::miss('public/miss');

资源路由

实际开发过程中不常用,不做描述。

快捷路由

此方式要求在控制器层面定义方法名称较为严格,简单做一下描述,不建议使用。

*给User控制器设置快捷路由

Route::controller('user','index/User');<?phpnamespace app\index\controller;class User{public functiongetInfo(){ }}

d5a681c51c3e92a783b663ba642aad9e.png代码

路由别名

路由别名不支持变量类型和路由条件判断,单纯只是为了缩短URL地址,并且在定义的时候需要注意避免和路由规则产生混淆。设置操作方法的请求类型:

*user 别名路由到 index/user 控制器

Route::alias('user','index/user',['ext'=>'html','allow'=>'index,save,delete','method'=>['index'=>'GET','save'=>'POST','delete'=>'DELETE'],]);

路由绑定

把当前的URL绑定到模块/控制器/操作,最多支持绑定到操作级别,例如在路由配置文件中添加:

*绑定当前的URL到 index模块

Route::bind('index');

*绑定当前的URL到 index模块的blog控制器

Route::bind('index/blog');

域名路由

支持完整域名、子域名和IP部署的路由和绑定功能,同时还可以起到简化URL、加快匹配的作用。

Route::domain(['blog','admin'],function(){Route::rule('new/:id','index/news/read');});

URL生成

支持路由URL地址的统一生成,并且支持所有的路由方式,但是不建议使用,直接在页面中手动设置,减少模板解析时间。

可以使用助手函数url,不需要继承框架基础控制器类即可使用,示例如下:

url('index/blog/read','id=5&name=thinkphp');

解析后为:/index.php/blog/5/name/thinkphp.html

其他配置方式不做过多讲解。请移步官方文档查看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值