600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > php框架原理 路由原理 · thinkphp框架原理解析 · 看云

php框架原理 路由原理 · thinkphp框架原理解析 · 看云

时间:2020-05-17 18:22:46

相关推荐

php框架原理 路由原理 · thinkphp框架原理解析 · 看云

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' (备注:比如我们访问/test 实际上他是定位到/index/index/test) 那么这些信息就会被Route基础类库注册到路由中,之后需要做的路由检测(根据路由定义返回不同的URL调度),这个时候需要分2种情况 ,第一种情况:检测后有值(备注:比如这种地址/test的访问) 第二种情况:无内容、这说明当前的url请求不在自定义的路由配置中(比如最简单的/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地址应该是:

/index/index/test

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

hello-test

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

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

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

/test

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。