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

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

php框架原理,路由原理 · thinkphp框架原理解析 · 看云相关推荐

  1. repo同步代码_一次协作多端同步,打通看云、github互相同步(serverless实践)

    本文原创首发于 https://coding3min.com/1194.html 之前在看云上专门搞了个电子书来归档和协作一些文章,支持 webhook(钩子),但是一直没用上,今天端午放假,早上就突 ...

  2. 一次协作多端同步,打通看云、github互相同步(serverless实践)

    本文原创首发于 https://coding3min.com/1194.html 之前在看云上专门搞了个电子书来归档和协作一些文章,支持 webhook(钩子),但是一直没用上,今天端午放假,早上就突 ...

  3. 计算机网络之交换机的工作原理---超详细解析,谁都看得懂!!

    在了解交换机的工作原理之前,我们先要了解几个概念. 一.相关概念  1.OSI七层模型是哪七层? 自上而下分别是: 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 交换机工作在数据链路层, ...

  4. 路由及路由器工作原理深入解析2:路由原理

    日志"路由及路由器工作原理深入解析1"http://user.qzone.qq.com/2756567163/blog/1438322342介绍了"为什么要使用路由器&q ...

  5. java黄油刀_ButterKnife原理解析看这篇文章就够了

    原标题:ButterKnife原理解析看这篇文章就够了 作者:SheHuan https://juejin.im/post/5acec2b46fb9a028c6761628 ButterKnife 算 ...

  6. Dubbo原理和源码解析之服务引用

    github新增仓库 "dubbo-read"(点此查看),集合所有<Dubbo原理和源码解析>系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行 ...

  7. mysql 分区 mycat 分片_Mysql系列六:(Mycat分片路由原理、Mycat常用分片规则及对应源码介绍)...

    一.Mycat分片路由原理 我们先来看下面的一个SQL在Mycat里面是如何执行的: select * from travelrecord where id in(5000001, 10000001) ...

  8. 对比ThinkPHP和Drupal看中外软件业现状

    住房.结婚.医疗.教育.养老每一个都是一座大山,"搞钱"必须是头等重要的大事,谁有空搞开源?于是仅两个核心开发者打造的ThinkPHP成为了很多人的希望,而另外一边,没有" ...

  9. 静态路由和默认路由原理

    目录 前言 一.路由原理 1.1 路由器的工作原理 1.2 路由表的形成 二.静态路由和默认路由 2.1 静态路由 2.2 默认路由 2.3 浮动路由(备份路由) 2.4 路由器转发数据包的封装过程 ...

最新文章

  1. 关于CTeX的几个大坑
  2. Bootstrap(七):CSS--图片
  3. 星模php格,extend/base/TencentSms.php · 纵之格/ShopXO - Gitee.com
  4. mvc路由原理 php_PHP实战002:CodeIgniter安装和入门使用
  5. 35-BigDecimal详解
  6. prinect pdf toolbox 2021中文版
  7. 一篇文章搞懂BIM技术的要点和前景
  8. excel怎么批量插行_excel如何批量在文字前加上固定文字
  9. 机器人庄园作文_关于周庄一日游作文六年级汇总5篇
  10. 图片特效展示(鼠标移入移除特效)
  11. Windows 10家庭版也能共享打印机(中)解除Guest账户网络登录限制,实现局域网共享...
  12. linux进程内存大于4g,linux支持大于4G内存
  13. 【冈凡记录】阿冈与叶凡超女8进6决赛的全观察!
  14. 学python之前需要学什么,学好python需要什么基础
  15. 快学 Go 语言 第 3 课 —— 分支与循环
  16. 中科院院士!南京大学,迎来新校长
  17. redis 删除数据,但是占用内存没有下降原因及解决办法
  18. 用户出示二维码向商家付钱
  19. 【程序员面试系列】手把手教你如何面试,你要的我都有(工作项目篇)
  20. 运营一个自媒体新账号,从拍摄剪辑到赚取收益,都有哪些步骤?

热门文章

  1. 基于51单片机的全自动洗衣机设计
  2. 小说视频图片站群采集工具程序源码
  3. 生成式AI颠覆了所有人机交互模式,大批产品经理失业
  4. 使用matlab设计IIR巴特沃斯低通滤波器
  5. C# WMI之Win32_IP4RouteTable
  6. 电子计算机按数字错乱,PC数字键盘错乱怎么修复?笔记本键盘按键错乱如何恢复?...
  7. 硬盘保护卡破解--小哨兵篇 (转)
  8. 用VirtualWall防止远古盗链的方法
  9. 通知:2020年CPA机考系统已开放!
  10. 开始进行自然语言处理