路由定义

启用路由

要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),并且在应用(或者模块)配置文件中开启路由:

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

路由定义

路由规则的定义格式为: '路由表达式'=>'路由地址和传入参数'

或者:array('路由表达式','路由地址','传入参数')

路由表达式

路由表达式包括规则路由和正则路由的定义表达式,只能使用字符串。

表达式 示例
正则表达式 /^blog\/(\d+)$/
规则表达式 blog/:id

路由地址

路由地址(可以支持传入额外参数)表示前面的路由表达式需要路由到的地址(包括内部地址和外部地址),并且允许隐式传入URL里面没有的一些参数,这里允许使用字符串或者数组方式定义,特殊情况下还可以采用闭包函数定义路由功能,支持下面6种方式定义:

定义方式 定义格式
方式1:路由到内部地址(字符串) '[控制器/操作]?额外参数1=值1&额外参数2=值2...'
方式2:路由到内部地址(数组)参数采用字符串方式 array('[控制器/操作]','额外参数1=值1&额外参数2=值2...')
方式3:路由到内部地址(数组)参数采用数组方式 array('[控制器/操作]',array('额外参数1'=>'值1','额外参数2'=>'值2'...)[,路由参数])
方式4:路由到外部地址(字符串)301重定向 '外部地址'
方式5:路由到外部地址(数组)可以指定重定向代码 array('外部地址','重定向代码'[,路由参数])
方式6:闭包函数 function($name){ echo 'Hello,'.$name;}

3.2.3版本开始支持全局路由定义,如果你定义的是全局路由,那么路由地址的定义格式中需要增加模块名,例如:

'blog/:id'=>'Home/blog/read' // 表示路由到Home模块的blog控制器的read操作方法

如果路由地址以“/”或者“http”开头则会认为是一个重定向地址或者外部地址,例如:

'blog/:id'=>'/blog/read/id/:1'

'blog/:id'=>'blog/read'

虽然都是路由到同一个地址,但是前者采用的是301重定向的方式路由跳转,这种方式的好处是URL可以比较随意(包括可以在URL里面传入更多的非标准格式的参数),而后者只是支持模块和操作地址。

举个例子,如果我们希望 avatar/123 重定向到 /member/avatar/id/123_small 的话,只能使用:

'avatar/:id'=>'/member/avatar/id/:1_small'

路由地址采用重定向地址的话,如果要引用动态变量,也是采用 :1、:2 的方式。

采用重定向到外部地址通常对网站改版后的URL迁移过程非常有用,例如:

'blog/:id'=>'http://blog.thinkphp.cn/read/:1'

表示当前网站(可能是http://thinkphp.cn)的 blog/123 地址会直接重定向到 http://blog.thinkphp.cn/read/123

默认情况下,外部地址的重定向采用301重定向,如果希望采用其它的,可以使用:

'blog/:id'=>array('http://blog.thinkphp.cn/read/:1',302);

在路由跳转的时候支持额外传入参数对(额外参数指的是不在URL里面的参数,隐式传入需要的操作中,有时候能够起到一定的安全防护作用,后面我们会提到),支持 额外参数1=值1&额外参数2=值2 或者 array('额外参数1'=>'值1','额外参数2'=>'值2'...) 这样的写法,可以参考不同的定义方式选择。例如:

'blog/:id'=>'blog/read?status=1&app_id=5','blog/:id'=>array('blog/read?status=1&app_id=5'),'blog/:id'=>array('blog/read','status=1&app_id=5'),'blog/:id'=>array('blog/read',array('status'=>1,'app_id'=>5)),

上面的路由规则定义中额外参数的传值方式都是等效的。statusapp_id参数都是URL里面不存在的,属于隐式传值,当然并不一定需要用到,只是在需要的时候可以使用。

路由参数

当路由地址采用数组方式定义的时候,还可以传入额外的路由参数。

这些参数的作用是限制前面定义的路由规则的生效条件。

限制URL后缀

例如:

'blog/:id'=>array('blog/read','status=1&app_id=5',array('ext'=>'html')),

就可以限制html后缀访问该路由规则才能生效。

限制请求类型

例如:

'blog/:id'=>array('blog/read','status=1&app_id=5',array('method'=>'get')),

就限制了只有GET请求该路由规则才能生效。

自定义检测

支持自定义检测,例如: 例如:

'blog/:id'=>array('blog/read','status=1&app_id=5',array('callback'=>'checkFun')),

就可以自定义checkFun函数来检测是否生效,如果函数返回false则表示不生效。

=====================

(0)

相关推荐

  • 说说Python中的lambda表达式?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  • JavaScript--总结三(数组和函数)

    数组 数组的概念: 将多个元素(通常是同一类型)按照一定顺序排列放到一个集合中,这个集合称之为数组---简(一组有序的数据) 数组的作用:可以一次性存储多个数据 数组的定义: 1.通过构造函数创建数组 ...

  • thinkPHP定义路由

    URL地址里面的index模块怎么才能省略呢,默认的URL地址显得有点长,下面就来说说如何通过路由简化URL访问. 我们在路由定义文件(application/route.php)里面添加一些路由规则 ...

  • 5.03 UG弹簧柔性变形动画运动仿真

    作者:秋风 发布时间:2012-04-27 浏览:20554 所需积分: 免费资料 教程格式: AVI视频教程 文件大小: 19.1 MB 教程介绍 在NX运动仿真内的物体都是刚性,不能模拟弹簧的柔性 ...

  • 镜空演绎:春风表意,奢华定义丨巴迪斯设计

    以人为本·极简生活 生活·镜空演绎 LIFE IN BARDISS 本案例采用现代极简风格, 在现代匆忙的都市生活里构筑理想的宜居范例. 追求精致,追求自由, 追求一种与众不同的美好生活. 温馨精致的 ...

  • (35条消息) 中国城域网路由情况介绍

    中国的城域网,大概有三张比较典型的,一个是中国移动的CMnet,一个是中国电信IP城域网,还有一个是中国网通IP城域网.作为接入最后的阵地,城域网的业务是最复杂的.含盖了IPTV,语音,Interne ...

  • 重点好文!!三级医院定义!6家医院被降级!

    作者|徐毓才 来源|看医界(ID:vistamed) 4月30日,太原市6家医院被当地卫生行政部门发文调低级别等次.其中4所医院因为评审结论已超过两个评审周期且未完成等级医院评审,1家医院在等级医院评 ...

  • 身和体的定义及用法

    ​易山/文 盲派命法,身旺不旺无所谓,体旺就行,体旺也能做事. 身:指日干. 体:指印比食伤禄(除财官以外的神). 身和体是取得财官的工具. 我的体能制住财官,我能踏实干事,能担当.制不住财官,偷奸耍 ...

  • 福建省税务局:税法对于企业集团的定义

    税法对于企业集团的定义. 留言时间:2021-04-25 纳税人所属地 福建 问题内容 <财政部 国家税务总局关于全面推开营业税改征增值税试点的通知>(财税[2016]36号 )规定&qu ...

  • Go map定义的几种方式以及修改技巧

    原文链接:http://www.zhoubotong.site/post/24.html 直入正题,我们看下以下代码: package mainimport ( "encoding/json ...

  • 人力资本的定义?

    如果你使用Google查找"人力资本定义"定义,你会感到惊讶和不知所措,你会获得大量且矛盾的定义,坦率地说不是很有帮助,因为他们没有确切说明它到底是什么. 对我而言,人力资本的定义 ...

  • 培训的定义、作用和最佳实践

    一.什么是人力资源开发? 人力资源开发一词最早是在1969年提出的,指的是劳动力的培训,教育和发展.它旨在弥合学校教育和工作场所要求之间的差距. 在早期,HRD会进行严格的动手培训,重点是掌握硬技能. ...