`
beyondhjjyt
  • 浏览: 39777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

【Thinkphp教程】URL路由功能解析

 
阅读更多
ThinkPHP支持URL路由功能,要启用路由功能,需要设置URL_ROUTER_ON 参数为true。开启路由功能后,并且配置URL_ROUTE_RULES参数后,系统会自动进行路由检测,如果在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向。
3.0版本的路由支持做了增强,包含规则路由和正则路由支持。
一、规则路由
规则路由是由2.1版本的简单路由进化而来,定义格式为:
格式1:'路由规则'=>'[分组/模块/操作]?额外参数1=值1&额外参数2=值2...'
格式2:'路由规则'=>array('[分组/模块/操作]','额外参数1=值1&额外参数2=值2...')
格式3:'路由规则'=>'外部地址'
格式4:'路由规则'=>array('外部地址','重定向代码')
注意事项
  • 路由规则中如果以“:”开头,表示动态变量,否则为静态地址

  • 格式2的额外参数可以传入数组或者字符串

  • 外部地址中如果要引用动态变量, 采用 :1、:2 的方式

  • 路由规则支持变量的数字约束定义,例如:'news/:id\d'=>'News/read'

  • 规则路由可以支持 全动态和动静结合定义,例如':user/blog/:id'=>'Home/Blog/user'

  • 路由规则非数字变量支持排除,例如 'news/:cate^add|edit|delete'=>'News/category'

  • 路由规则中的静态地址部分不区分大小写

下面是规则路由的定义示例:

  1. 'URL_ROUTER_ON'=>true,//开启路由

  2. 'URL_ROUTE_RULES'=>array(//定义路由规则

  3. 'news/:year/:month/:day'=>array('News/archive','status=1'),

  4. 'news/:id'=>'News/read',

  5. 'news/read/:id'=>'/news/:1',

  6. ),


其中定义了3条路由规则,如果我们访问下面的URL
http://serverName/index.php/news/8
http://serverName/index.php/news/10
则会会匹配到第二条规则路由,并解析到News模块的read操作,而且后面的数字会传入$_GET['id']变量。
如果我们访问下面的URL
http://serverName/index.php/news/2012/01/08
http://serverName/index.php/news/2012/01/15
则会匹配到第一条规则路由,并解析到News模块的archive操作,而且会传入year、month和day的GET变量。
第二条路由规则还可以改成
'news/:year/:month/:day/'=>'News/archive?status=1',
通常情况下,需要传入数组参数的时候才会需要使用格式数组来定义
第三条路由规则是一个路由重定向,一般是用于网站改版后的URL迁移,如果之前的URL访问规则是
http://serverName/index.php/news/read/8
那么会重定向到新的内部路由规则
http://serverName/index.php/news/8
这里之所以用了重定向路由是为了告诉搜索引擎这些地址已经发生改变了 而且以后是不需要保留。
有些情况下,可能会存在冲突,假如要支持通过标识来访问文章,
http://serverName/index.php/news/hello_world
那么解析规则就会混淆,但是我们可以更改路由规则如下:

  1. 'URL_ROUTER_ON'=>true,//开启路由

  2. 'URL_ROUTE_RULES'=>array(//定义路由规则

  3. 'news/:year/:month/:day'=>array('News/archive','status=1'),

  4. 'news/:id\d'=>'News/read',

  5. 'news/:name'=>'News/read',

  6. 'news/read/:id'=>'/news/:1',

  7. ),


news/:id\d 规则表示当URL中id参数为数字时才会匹配
而 news/:name 规则定义 则会匹配所有的字符情况,这也是默认的情况,目前规则路由只区分数字和所有字符的情况,如果需要严格的类型约束,请采用正则路由定义规则。
举个例子,我们现在用规则路由来实现之前用空操作实现的城市功能,我们定义了City控制器如下:

  1. classCityActionextendsAction{

  2. publicfunctioncity(){

  3. //读取城市名

  4. $cityName=$_GET['name'];

  5. echo'当前城市'.$cityName;

  6. }

  7. }


我们只需要定义下面的路由规则

  1. 'city/:name'=>'City/city'


就能实现之前用空操作实现的同样功能了。
接下来,我们就可以在浏览器里面输入
http://serverName/index.php/City/beijing/
http://serverName/index.php/City/shanghai/
http://serverName/index.php/City/shenzhen/
会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:Shenzhen
规则路由可以支持动态和静态混合甚至是全动态,例如:

  1. 'URL_ROUTER_ON'=>true,//开启路由

  2. 'URL_ROUTE_RULES'=>array(//定义路由规则

  3. ':user/bolg/:id'=>'Blog/read',

  4. ':user/:blog_name'=>'Blog/read',

  5. ),


第一条路由会匹配下列URL访问
http://serverName/index.php/user1/blog/25/
http://serverName/index.php/username2/blog/245/
并解析到Blog模块的read操作方法 ,传入user和id两个GET参数。
第二条路由会匹配到下面的URL访问
http://serverName/index.php/user1/hello_world
http://serverName/index.php/username2/test_nme
同样解析到Blog模块的read操作方法,只是传入的参数变成blog_name 一个GET参数。
二、正则路由
正则路由可以实现更加复杂的路由定义,支持的定义格式如下:
格式1:'路由正则'=>'[分组/模块/操作]?参数1=值1&参数2=值2...'
格式2:'路由正则'=>array('[分组/模块/操作]','参数1=值1&参数2=值2...') 格式3:'路由正则'=>'外部地址'
格式4:'路由正则'=>array('外部地址','重定向代码')
注意事项:
  • 正则路由规则必须以“/”开始和结束

  • 格式2的参数可以传入数组或者字符串

  • 参数值和外部地址中可以用动态变量 采用 :1、 :2 的方式

下面是正则路由的定义示例:

  1. 'URL_ROUTER_ON'=>true,//开启路由

  2. 'URL_ROUTE_RULES'=>array(//定义路由规则

  3. '/^blog\/(\d+)$/'=>'Blog/read?id=:1',

  4. '/^blog\/(\d+)\/(\d+)$/'=>'Blog/achive?year=:1&month=:2',

  5. '/^blog\/(\d+)_(\d+)$/'=>'blog.php?id=:1&page=:2',

  6. ),


分享到:
评论

相关推荐

    ThinkPHP5路由完全指南

    10. **自定义路由解析器**:如果你有特殊需求,还可以自定义路由解析规则,增强路由功能。 通过学习和实践《ThinkPHP5路由完全指南》,开发者能够掌握如何灵活地定义和使用路由,从而提升项目开发的效率和代码质量...

    ThinkPHP5快速入门和路由完全指南和数据库模型掌握

    《ThinkPHP5快速入门和路由完全指南》及《数据库模型掌握》是一套全面解析ThinkPHP5框架的教程,旨在帮助初学者迅速上手并深入理解该框架的核心特性。以下是关于这些主题的详细知识点: 1. **ThinkPHP5快速入门**:...

    ThinkPHP5路由完全指南-离线版

    《ThinkPHP5路由完全指南》是一本专注于ThinkPHP5框架中的路由系统的重要参考资料。路由是Web应用程序中的核心组件,它负责解析HTTP请求并将其映射到相应的处理逻辑。在ThinkPHP5中,路由机制得到了极大的优化,使得...

    PHP Thinkphp5全套基础视频教程 适合新手党入门(第四课 URL和路由 - URL)

    1. **理解Thinkphp5的默认路由规则**:在没有特殊配置的情况下,如何根据URL自动解析到对应的控制器和方法。 2. **配置路由规则**:学习如何在`config/route.php`文件中定义自己的路由,包括简单的路径映射、正则...

    一个好的Thinkphp教程

    Thinkphp支持自定义路由规则,通过配置路由,可以实现URL的美化,提高用户体验。同时,有多种URL模式可供选择,如PATHINFO、QUERY_STRING等,满足不同场景需求。 五、数据库操作 Thinkphp内置了完善的数据库操作...

    ThinkPHP教程系列一

    在后续的章节中,我们将逐步学习模型(Model)的使用,如何进行数据库操作,如何利用视图模板渲染复杂页面,以及ThinkPHP提供的各种便捷功能,如中间件、服务容器、事件系统等。随着学习的深入,你将掌握如何利用...

    提升ThinkPHP5速度性能的几个技巧.zip

    运行`php think optimize route`命令,ThinkPHP5会在运行时直接读取缓存,从而减少解析和匹配路由的时间。 3. **生成配置缓存文件**: 文件:`php think optimize config.txt` 配置缓存能加快应用初始化速度。...

    thinkphp5框架路由原理与用法详解

    概括的说:路由就是网络请求的url与thinkphp应用层的逻辑处理地址的对应关系。 通俗的说:路由就是把url的请求优雅的对应到你想要执行的操作方法。 路由其实就是把真实的url地址隐藏起来,使用访问地址来访问应用...

    thinkphp3.12视频教程

    ### ThinkPHP 3.12 视频教程知识点解析 #### 一、ThinkPHP框架简介 - **定义**:ThinkPHP是一款用PHP语言编写的开源Web应用框架,遵循MVC设计模式,它是为了敏捷开发和简化企业级应用开发而诞生的。 - **特点**: ...

    ThinkPHP 分布式服务发现全解析:架构与实现

    ThinkPHP 是一个免费开源的、快速且简单的面向对象的轻量级 PHP 开发框架,它是为了敏捷 WEB 应用开发和简化企业应用开发而设计的。自2006年初诞生以来,ThinkPHP ...此外,ThinkPHP 框架还提供了路由功能,允许开发

    thinkphp5.0.24.zip

    ThinkPHP5.0.24对性能进行了多方面的优化,包括路由解析速度、数据库查询效率等。通过开启OPCache,还可以进一步提升PHP代码的执行速度。 总结起来,ThinkPHP5.0.24是一个全面、高效且易于学习的PHP框架,它以其...

    thinkPHP5框架路由常用知识点汇总

    本文实例讲述了thinkPHP5框架路由常用知识点。分享给大家供大家参考,具体如下: 一、路由的模式 普通模式(默认pathinfo,不解析路由) 'url_route_on' => false 混合模式(pathinfo+解析路由) 'url_route_on' =...

    php框架ThinkPHP代码分析核心解析.pdf

    在本文中,我们将对 ThinkPHP 的基础知识点进行解析,涵盖框架的基本结构、核心组件、配置、路由、模板引擎、数据库交互等方面。 一、ThinkPHP 框架结构 ThinkPHP 框架的结构主要分为五个部分:入口文件、应用层、...

    Thinkphp内核素材解析源码支持20多家素材网站的采集.zip

    《Thinkphp内核素材解析源码支持20多家素材网站的采集》 在Web开发领域,框架的应用极大地提升了开发效率和代码的可维护性。Thinkphp作为一款深受国内开发者喜爱的PHP框架,以其简洁的语法、强大的功能和丰富的社区...

    2014年辛星ThinkPHP教程夏季版

    教程内容分为两个主要部分:第一部分是ThinkPHP的基础介绍,从ThinkPHP简介、快速入门、URL操作、模板使用、模型与数据库操作等多个方面对ThinkPHP进行了解析。第二部分则是一个具体的应用示例——构建一个微型论坛...

    ThinkPHP 5.0.0_5.0.23 RCE 漏洞分析1

    2. ThinkPHP 的路由机制将该 URL 解析为一个方法调用,具体来说,是将 `_method` 参数设置为 `__construct`,并将 `filter` 参数设置为 `system` 3. ThinkPHP 的 App.php 文件中的 run 方法将该方法调用传递给 `exec...

    2014年辛星关于ThinkPHP教程的夏季版的教程的配套源代码

    1. **路由系统**:ThinkPHP的路由系统允许开发者灵活地定义URL规则,实现URL与控制器方法的映射,提高应用的可读性和可维护性。 2. **自动加载**:通过自动加载机制,可以无需手动require或include文件,降低了代码...

Global site tag (gtag.js) - Google Analytics