在thinkphp中,路由是指根据url, 分配到对应的处理程序的映射;其作用是简化url访问地址,并根据定义的路由类型做出正确的解析。简单来说,路由就是一个路径的解析,根据客户端提交的路径,将请求解析到相应的模块或控制器或方法上。
本教程操作环境:Windows7系统、thinkphp v5.1版、Dell G3电脑。
我们来研究一下ThinkPHP5的路由机制。
虽然说TP5的完全开发手册上面讲路由讲的很清楚,但是我们还是在本文研究一下TP5的路由是怎么一回事,毕竟看博客比看书要舒服一些嘛。
首先,提出三个问题:
立即学习“PHP免费学习笔记(深入)”;
路由(route)是指根据url, 分配到对应的处理程序的映射。
简单来说,就是一个路径的解析,根据客户端提交的路径,将请求解析到相应的模块/控制器/方法上。
官方文档里面是这样子定义的=>路由的作用是简化URL访问地址,并根据定义的路由类型做出正确的解析。
手动解释一下:平常我们按照习惯去访问我们的ThinkPHP项目的时候,常规的url应该是这样子写的,(本地举例)http://localhost/项目名/public/index.php/模块名/控制器名/方法名
一串url输进去之后,就会感觉很绝望,(小声吐槽)=>“我只是想测试一个小接口让我打这么长一串地址、地址太长记不住呀......”。这个时候我们就可以用路由去简化他的地址,并且在缩短地址的同时进行一些规则的定义。
可能有人会脱口而出:为了简化路径呀。当然,这是原因之一,但原因并没有那么简单。
简化路径是一个比较大的原因,因为我当初就是觉得路径太长然后跑过去把路由开起来了,但是后来在使用的过程中,发现Route的作用其实不仅局限于简化路径。
我们可以开启路由的强制使用,让大家只能从我定义的路由进来,这样就有一个好处,你在一些不想给用户访问的控制器写了一些脚本,你开启了完全路由强制使用的话,用户是访问不了这些脚本的,否则的话,用户如果访问了这些脚本,脚本有时修改数据库的,那么就比较危险了。
还有就是我们可以定义好从这个路径进来是get操作还是post操作,就不会出现以前有种什么情况,一个控制器的方法,你从get也可以访问,post也可以访问,就很杂乱,当然有人会说,get和post都能访问也没什么大不了的吧,其实将这些方法之间区分开来,对于Restful API的思想的体现是比较有帮助的。
同理,http和https的规定我就不说了。
到了这里,大家是不是觉得路由有些神奇了,原来它可以干这么多事情,那么我们就来研究一下怎么去使用它。
使用之前,我们先了解一下配置信息,还是我的这个叉叉项目,打开config文件:
有两个要注意的地方,首先第一个红框里面tp默认是给我们开启了路由这个模式的,第二个红框,tp默认是关闭掉强制使用路由这一项,什么意思呢?就是我现在通过我们平常的地址模式访问也可以成功,通过路由访问也可以成功。
我平常做项目的时候为了安全起见是会将这一条改成true的,那么我们来看一下效果
未开启强制路由的时候:
按照常规的地址访问是可以成功的,好我们现在开启强制使用路由:
同样的地址报错了,并且抛出了一个路由未找到的错误,因为我们未在路由文件中定义这个路由,所以它抛出了错误,说明我们现在是强制使用了路由。
那么我们现在来定义一下它,首先从最简单的一种:
找到route文件
首先我们先要引入一下think下面的路由这个类,然后我们调用里面get静态方法,从方法名我们可以很容易得知,这是通过get方法去访问的,那么第一个参数和第二个参数代表什么呢,第二个参数代表常规url中的 模块/控制器/方法,第一个参数代表想要用什么名称来替换后面的 模块/控制器/方法。
也就是说,我原本使用http://localhost/xx/public/index.php/xx/test/xx可以访问到我的控制器方法,现在只需要http://localhost/xx/public/index.php/xx就可以访问到我的控制器方法了。
看一下效果:
成功使用路由访问,那么,下一步我们来细究一下这个规则的制定(比如说get和post访问的区别)
我现在将get方法改成post方法然后我在用get方法去访问看看会发生什么:
可以看到我们采用了get是访问不到的,只有post才能访问到,怎么样,感受到路由好玩的地方了吗。
深一点的我们还可以这样子定义路由:
第三个参数代表访问的方式,像我这里面定义的这种形式就是get和post操作都可以访问到,最后一个参数代表的是要不要检验https协议,如果是false的话就不会检验https,如果是true的话我们用http去访问的时候就会找不到,这样子我们就更近一步的保障了我们的接口的安全性。至于效果的话就不演示了。
路由还有什么特别之处呢?路由甚至可以将get操作传的参数归并进url里面,我们原本的get操作应该是这样子的:url?id=1,经过路由之后,我们可以把它规定成 url/1,这样子连id这个参数都被隐藏掉了,好处大家都晓得吧。至于过程的话就上开发手册上去淘一淘吧。
当然,路由还有一些别的辅助性的小功能,比如说闭包函数呀什么的,我就不一一介绍了,因为这种辅助性的功能在开发过程中不是很常用,感兴趣的话可以去完全开发手册上面去看。
路由的相关简介和使用路由的好处就介绍到这里。
【相关教程推荐:thinkphp框架】