TP5路由分发原理简介

1、thinkphp5中一个典型的URL请求的执行过程大致如下:


用户请求 -> 路由解析 -> 调度请求 -> 执行操作 -> 响应输出


2、路由在框架中的作用打个比方的话,路由好比是WEB应用的总调度室,对于访问的URL地址,路由可以拒绝或者接受某个URL请求,并进行分发调度,而且还有一个副作用是因为路由规则可以随意定义,因此可以让你的URL请求地址更优雅,因为不会暴露实际的URL地址,也就意味着更安全,5.0的路由不仅仅只是支持路由到控制器的操作方法,甚至可以路由到任何的类或者闭包。


3、那么我们来分析下路由内部做了哪些事情,还是列举一个简单的例子


url请求过来会执行 App类里面的run方法,这个方法中tp5会去检测路由,也就是routeCheck方法,这个方法会去加载application应有目录下的route.php,这个文件其实就是我们自定义的一些路由规则 , 然后再通过tp内置的Route类库批量注册路由, 比如如果我们在route.php里面注册了这么一个路由信息'test' => 'index/index/test' (备注:比如我们访问xxx.com/test 实际上他是定位到xxx.com/index/index/test) 那么这些信息就会被Route基础类库注册到路由中,之后需要做的路由检测(根据路由定义返回不同的URL调度),这个时候需要分2种情况 ,第一种情况:检测后有值(备注:比如这种地址xxx.com/test的访问) 第二种情况:无内容、这说明当前的url请求不在自定义的路由配置中(比如最简单的xxx.com/index/index/index这个地址的访问),那么这个时候会执行Route::parseUrl这个解析,但是不管怎么样这两种情况的结果返回的都是如下格式:

Array

(

   [type] => module    #类型  tp5中有好几种 具体几个类型可以参考App类里面的exec方法

   [module] => Array

       (

           [0] => xxx  #模块

           [1] => xxx  #控制器

           [2] => xx   #方法

       )


)

4、接下来会根据上面返回的内容 来记录当前调度信息,然后会去执行app类里面的exec方法,我们已type=module来举例, 之后就会去执行App类里面的module(执行模块方法)、大致就这么回事


案例分析:

我们用一个URL请求案例来体验下路由的使用,定义一个控制器类命名为application/index/controller/Index.php:


namespace app\index\controller;


class Index

{

   public function test()

   {

       return 'hello-test' ;

   }

}

要访问Index控制器的test操作方法的话,没有定义路由规则之前,访问的URL地址应该是:


http://xxx.com/index/index/test

访问后浏览器输出结果为:

hello-test

下面我们来定义一个路由:

在application目录下的route.php中加入:'test' => 'index/index/test',


定义后,我们就可以直接访问下面的地址:


http://xxx.com/test

访问后浏览器输出结果和之前是一样的。

之前singwa做过2套实战课程,成功帮助很多小伙伴找到了心仪的工作

前端到后台ThinkPHP开发整站

ThinkPHP5实战-仿百度糯米开发多商家电商平台

备注:视频合作方-慕课网

你可能感兴趣的:(TP5路由分发原理简介)