thinkphp 规则路由
规则路由是一种比较容易理解的路由定义方式,采用ThinkPHP设计的规则表达式来定义。
规则表达式
规则表达式通常包含静态地址和动态地址,或者两种地址的结合,例如下面都属于有效的规则表达式:
'my' => 'Member/myinfo', // 静态地址路由
'blog/:id' => 'Blog/read', // 静态地址和动态地址结合
'new/:year/:month/:day'=>'News/read', // 静态地址和动态地址结合
':user/:blog_id' =>'Blog/read',// 全动态地址
规则表达式的定义始终以“/”为参数分割符,不受
URL_PATHINFO_DEPR
设置的影响
每个参数中以“:”开头的参数都表示动态参数,并且会自动对应一个GET参数,例如:id
表示该处匹配到的参数可以使用$_GET['id']
方式获取,:year
、 :month
、:day
则分别对应$_GET['year']
、 $_GET['month']
和 $_GET['day']
。
数字约束
支持对变量的类型检测,但仅仅支持数字类型的约束定义,例如
'blog/:id\d'=>'Blog/read',
表示只会匹配数字参数,如果你需要更加多的变量类型检测,请使用正则表达式定义来解决。
目前不支持长度约束,需要的话采用正则定义解决
函数支持
可以支持对路由变量的函数过滤,例如:
'blog/:id\d|md5'=>'Blog/read',
表示对匹配到的id变量进行md5处理,也就是说,实际传入read操作方法的$_GET['id']
其实是 md5($_GET['id'])
。
注意:不支持对变量使用多次函数处理和函数额外参数传入。
可选定义
支持对路由参数的可选定义,例如:
'blog/:year\d/[:month\d]'=>'Blog/archive',
[:month\d]
变量用[ ]包含起来后就表示该变量是路由匹配的可选变量。
以上定义路由规则后,下面的URL访问地址都可以被正确的路由匹配:
http://serverName/index.php/Home/blog/2013
http://serverName/index.php/Home/blog/2013/12
采用可选变量定义后,之前需要定义两个或者多个路由规则才能处理的情况可以合并为一个路由规则。
可选参数只能放到路由规则的最后,如果在中间使用了可选参数的话,后面的变量都会变成可选参数。
规则排除
非数字变量支持简单的排除功能,主要是起到避免解析混淆的作用,例如:
'news/:cate^add|edit|delete'=>'News/category'
3.2.2版本开始,为了避免和函数规则冲突,规则路由排除分隔符改为“-”,所以上面的路由定义需要改为: 'news/:cate^add-edit-delete'=>'News/category'
因为规则定义的局限性,恰巧我们的路由规则里面的news和实际的news模块是相同的命名,而:cate
并不能自动区分当前URL里面的动态参数是实际的操作名还是路由变量,所以为了避免混淆,我们需要对路由变量cate进行一些排除以帮助我们进行更精确的路由匹配,格式^add|edit|delete
表示,匹配除了add edit 和delete之外的所有字符串,我们建议更好的方式还是改进你的路由规则,避免路由规则和模块同名的情况存在,例如
'new/:cate'=>'News/category'
就可以更简单的定义路由规则了。
完全匹配
规则匹配检测的时候只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望完全匹配,可以使用$符号,例如:
'new/:cate$'=> 'News/category'
http://serverName/index.php/Home/new/info
会匹配成功,而
http://serverName/index.php/Home/new/info/2
则不会匹配成功。、
如果是采用
'new/:cate'=> 'News/category'
方式定义的话,则两种方式的URL访问都可以匹配成功。
完全匹配的路由规则中如果使用可选参数的话将会无效。
原文地址:https://www.cnblogs.com/furuihua/p/11776162.html
- Elasticsearch实战 | 必要的时候,还得空间换时间!
- 转--以io.Writer为例看go中的interface{}
- Go支持https协议的简单例子
- Elasticsearch索引增量统计及定时邮件实现
- 机器学习中的特征空间
- 简单易学的机器学习算法——马尔可夫链蒙特卡罗方法MCMC
- 推荐算法——基于图的推荐算法PersonalRank算法
- 推荐算法——非负矩阵分解(NMF)
- 【Go 语言社区】转-golang windows 判断锁屏
- 【Go 语言社区】单点redis 持久化在高并发下存在延迟情况
- 设计模式(2)-策略模式之多用组合少用继承
- Golang获取随机端口和本机ip地址
- 设计模式(3)-装扮你的类(装饰模式)
- [Go 语言社区]服务器读取配置文件只-json数据
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC