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套实战课程,成功帮助很多小伙伴找到了心仪的工作
备注:视频合作方-慕课网