实例介绍
ThinkPHP5路由完全指南PDF ThinkPHP5作为一个全新的版本,重构后的路由功能可圈可点,是5.0的一大亮 点,本指南系列为您详细介绍5.0路由的用法,并进行深入剖析其内部实现原 理,助您完全掌握路由。
主要内容 由浅入深的介绍了路由的基本用法及高级技巧,为您揭开5.0路由的神秘面纱。 章节及完成情况:(√表示已经完成 (一)路由初体验√ ●(二)路由执行流程√ ·(三)路由变量√ (四)路由地址y ·(五)路由分组√ ●(六)别名路由y (七)资源路由√ ·(八)路由生成√ (九)路由高级√ (十)域名路由√ ·(十—)路由绑定√ ●(十二)路由实例(待更新) 附录A:路由速查表(更新中~) ●附录B:路由常见问题(更新中~) 本文内容有部分内容需要使用最新5.0.2版本。 阅读对象 本指南的阅读对象是对 Thinkphp5有基本的认识并且希望深入了解和使用路 由的开发者,讲述的内容需要你已经掌握下面的基础知识,否则可能会有所困 惑,事倍功半 我们假设你已经了解: 如何安装框架并配置 Vhost 如何定义50的控制器 如何正确使用命名空间; 如何正确访问一个操作 如果对以上内容还不掌握的话,建议首先阅读下本入门系列的第一部 《 ThinkPHP5.0快速入门》。如果你已经用过路由,那么也不用担心会浪费你 的时间,本指南会带你深入剖析路由的执行流程和了解一些你未必清楚的路由 用法和技巧,因为路由实在是一个既简单而又非常复杂的东西。 路由初体验 一个典型的 Thinkphp应用的URL请求的执行过程通常是 用户请求->路由解析->调度请求->执行操作->响 应输出 路由在框架中的作用打个比方的话,路由好比是WEB应用的总调度室,对于访 问的∪RL地址,路由可以拒绝或者接受某个URL请求,并进行分发调度,而且还 有一个副作用是因为路由规则可以随意定义,因此可以让你的∪RL请求地址更优 雅,因为不会暴露实际的∪RL地址,也就意味着更安全,5.0的路由不仅仅只是 支持路由到控制器的操作方法,甚至可以路由到任何的类或者闭包。 和 Caravel等不同,框架本身不强制定义路由,默认情況下的如果没有定义任 何路由规则或者没有匹配到仼何的路由规则,则按照模块/控制器/操作的∪RL规 范来解析(也就是系统默认的解析规则,这点看过 ThinkPhP5.0快速入门的用 户已经很清楚了,在此就不再多说)。 在本文后面的示例中,为了方便讲解,我们统一设置 vhost访问,以 apache为例的话定义如下(其它环境请自行百度) <VirtualHost * 80>DocumentRoot/home/ www/tp5public ServerName tp5 </VirtualHost> 把 DocumentRoot修改为你本机tp的 public目录,并注意修改本机的 hosts文件把tp5.com指向本地127.8.9.1 在没有定义任何的路由规则之前,你的URL访问地址可能会是下面这样 http://tp5.com/module/controller/action/name/value 如果你还不了解如何隐藏UR地址中的 index.php可以参考官方开发手册 的URL重写。 如果需要定义应用的路由规则,直接在 application/ route.php文件中添加 路由规则即可(虽然你也可以在应用的公共文件中定义路由,但并不建议,后 面会理解为什么) 如果你自定义了CONF_PATH常量的话,路由配置文件的位置可能有所区 别,请自行调整。 本节用一个He11o, world!的例子来体验下路由的使用,定义一个控制器类 命名为app1 ication/ index/ controller/ Index,php namespace app\index\controller; class Indext public function hellot eturn Hello, World!j 要访问 Index控制器的he1l0操作方法的话,没有定义路由规则之前,访问 的URL地址应该是: http://tp5.com/index/index/hello 访问后浏览器输出结果为 Hello, World! 下面我们来定义一个路由先 Route: rule( hello, index/Index/hello') 定义后,我们就可以直接访问下面的地址 http://tp5.com/hello 访问后浏览器输出结果和之前是一样的。 如果你够细心的话,会发现原来的URL地址 http://tp5.com/index/index/hello已经禁止访问,这是由于5.0遵 循唯一的URL地址设计 很多时候操作方法都会有变量传入需要,例如给he11o方法添加一个name 变量,方法代码修改如下 namespace app\index\controllers class Indext public function hello($name) return Hello,. name 原来的URL地址变成是(记得先删除前面定义的路由规则,否则会禁止访问下面 的∪RL地址) http://tp5.com/index/index/hello/name/thinkphp 访问后浏览器输出结果为 Hello, thinkphp! 现在给该URL地址定义一个新的路由规则如下: Route: rule( hello/: name, ' index/Index/hello); 现在我们来分析下rue方法的参数,第一个参数称为路由规则(通过路由访 问的地址),第二个参数为该规则对应的路由地址(也就是原来定义路由之前 访问的∪RL地址) 路由规则通常可以包含变量(例如其中的:name就是一个路由变量),路由规 则中包含变量(包括可选变量)的就称该条路由规则为动态路由,没有包含任 何变量的路由我们称之为静态路由。 前面我们定义过两条路由规则就分别是静态路由和动态路由 //静态路由规则 Route:rule("he1lo'," index/ Index/he1lo'); //动态路由规则 Route::rule("he1lo/:name'", index/ Index/ hello"); 静态路由和动态路由的解析过程是完全不同的,简单点说的话,动态路由需 要遍历所有规则依次匹配(除非第一条就匹配成功),是一个多次匹配的过 程,而静态路由是一次快速匹配(当然特殊情况下也会有静态路由无效的情 况)。 定义好路由规则后,URL地址就可以简化为 http://tp5.com/hello/thinkphp 路由规则中的静态规则部分不区分大小写,所以 Route: rule( Hello/: name, ' index/index/hello); 和前面定义的路由是相同的,虽然是两条不同的路由规则 我们知道一个URL请求类型有很多,常用的包括GET/posT/pUT/ DELETE等,我们使用rule方法注册的路由,默认是支持任意请求类型访问 的,不过你可以通过第三个参数来限定请求类型: Route: rule( hello/: name, index/index/hello,'GET )i 则表示,只有通过GET请求的访问,该路由才会生效。 为了方便定义,系统给每个请求类型的路由规则增加了独立的方法,所以你可 以使用下面的方法注册一条相同的路由 Route: get( hello/: name, index/index/hello); 如果你希望路由可以支持所有的请求类型,也可以使用 Route: any( hello/: name,index/index/hello) any方法其实和rule方法是一样的,区别在于不用写第三个参数。 Thinkphp5支持的请求类型包括 [GET,POST,PUT, DELETE,PATCH,HEAD, OPTIONS 不过只支持了get/post/put/ delete/ patch常用请求类型的路由 注册方法,其它两个类型由于不常用,需要自己使用rue方法注册。 个路由规则可以设置匹配的条件参数(其实请求类型也是一个匹配条件,单 独出来一个参数是从性能考虑),匹配条件是一个数组,可以包含多个匹配条 件,例如 Route: any( hello/: name, index/index/hello,[ ext > html method get 上面的路由规则表示,必须是GET请求访问,并且URL后缀为htm1的地址。 因此,访问下面的∪RL地址就会抛出异常 http://tp5.com/hello/thinkphp 正确的URL地址应该是 http://tp5.com/hello/thinkphp.htmi 如果没有定义路由的后缀参数,表示路由规则本身不限制URL后缀访问(但 仍然受应用配置参数u1htm1 suffix影响)。 更多的路由参数后续还会提到,除了路由参数外,我们还可以对路由变量设置 规则,这个时候就需要用到第四个参数。 Route:: any( hello/: name, index/index/hello,[ ext html method get ],["name'=>"[A-za-28-9]+']) 这里定义了路由变量name的变量规则(正则表达式),在实际正则表达式检 测的时候,最终的正式表达式其实是[A-2a-20-9]+$/,系统会自动加上 起始和结束符号。当URL里面的变量不符合正则表达式匹配要求的时候,路由规 则就不会生效,因此下面的URL地址访问就会出错 http://tp5.com/hello/think-php 吋于any方法定义的路由规则,系统支持直接在路由配置文件中直接返回数组 的方式定义,例如 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论