学习ThinkPHP必须理解的知识(二)——ThinkPHP路由

ThinkPHP支持URL路由功能,要启用路由功能,需要设置ROUTER_ON 参数为true。开启路由功能后,系统会自动进行路由检测,如果在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向。路由功能需要定义路由定义文件,位于项目的配置目录下面,文件名为routes.php,定义格式:

PHP代码

Return Array(

// 第一种方式 常规路由

‘RouteName’=>array(‘模块名称’,‘操作名称’,‘参数定义’,‘额外参数’),

// 第二种方式 泛路由

‘[email protected]’=>array(

array(‘路由匹配正则’,‘模块名称’,‘操作名称’,‘参数定义’,‘额外参数’),

),

)

系统在执行Dispatch解析的时候,会判断当前URL是否存在定义的路由名称,如果有就会按照定义的路由规则来进行URL解析。例如,我们启用了路由功能,并且定义了下面的
一个路由规则:

PHP代码

‘blog’=>array(‘Blog’,‘index’,‘year,month,day’,‘userId=1&status=1′)

泛路由支持

新版引入了泛路由支持,提供了对同一个路由名称的多个规则的支持,使得URL的设置更加灵活,例如,我们对Blog路由名称需要有多个规则的路由:

PHP代码

‘[email protected]’=>array(

array(‘/^\/(\d+)(\/p\/\d)?$/’,‘Blog’,‘read’,‘id’),

array(‘/^\/(\d+)\/(\d+)/’,‘Blog’,‘archive’,‘year,month’),

),

第一个路由规则表示解析 Blog/123 这样的URL到Blog模块的read操作

第二个路由规则表示解析 Blog/2007/08 这样的URL到Blog模块的archive操作

泛路由的定义难度就在路由正则的定义上面,其它参数和常规路由的使用一致。

举个简单路由的例子,如果我们有一个City模块,而我们希望能够通过类似下面这样的URL地址来访问具体某个城市的操作:

http://serverName/index.php/City/shanghai/

shanghai这个操作方法是不存在的,我们给相关的城市操作定义了一个city方法,如下:

PHP代码

Class CityAction extends Action{

public function city(){

// 读取城市名称

$cityName = $_GET[‘name‘];

echo (‘当前城市:’.$cityName);

}
}

接下来我们来定义路由文件,实现类似于

http://serverName/index.php/City/shanghai/

这样的解析,路由文件名称是

PHP代码

Return array(

‘City’=>array(‘City’,‘city’,‘name’);

);

这样,URL里面所有的City模块都会被路由到City模块的city操作,而后面的第二个参数会被解析成 $_GET[‘name’]

接下来,我们就可以在浏览器里面输入

http://serverName/index.php/City/beijing/

http://serverName/index.php/City/shanghai/

http://serverName/index.php/City/shenzhen/

会看到依次输出的结果是:

当前城市:beijing

当前城市:shanghai

当前城市:shenzhen

学习ThinkPHP必须理解的知识(二)——ThinkPHP路由

时间: 2024-10-27 04:22:20

学习ThinkPHP必须理解的知识(二)——ThinkPHP路由的相关文章

JSP的学习(3)——语法知识二之page指令

本篇接上一篇<JSP的学习(2)——语法知识一>,继续来学习JSP的语法.本文主要从JSP指令中的page指令,对其各个属性进行详细的学习: JSP指令: JSP指令是为JSP引擎而设计的,JSP指令不产生任何可见输出,只是告诉在转换成Servlet的过程中如何处理JSP页面中的其余部分.在JSP 2.0 规范中共定义了三个指令: 1)   page指令 2)   include指令 3)   taglib指令 taglib指令是导入标签库的指令,以后会介绍到. JSP指令格式: <%@

如何学习(4):利用旧知识理解新知识

有这么一个笑话: 一天,数学家觉得自己已受够了数学,于是他跑到消防队去宣布他想当消防员. 消防队长说:"您看上去不错,可是我得先给您一个测试." 消防队长带数学家到消防队后院小巷,巷子里有一个货栈,一只消防栓和一卷软管.消防队长问:"假设货栈起火,您怎么办?" 数学家回答:"我把消防栓接到软管上, 打开水龙,把火浇灭."消防队长说:"完全正确!最后一个问题:假设您走进小巷,而货栈没有起火,您怎么办?"数学家疑惑地思索了半天,终

ThinkPHP分页使用例子(二十一)

原文:ThinkPHP分页使用例子(二十一) ThinkPHP分页使用 PHP代码: public function fenye(){ $User = M('Leyangjun'); // 实例化User对象 import('ORG.Util.Page');// 导入分页类 $count      = $User->count();// 查询满足要求的总记录数 $Page       = new Page($count,2);// 实例化分页类 传入总记录数和每页显示的记录数 $show    

ThinkPHP的操作基础(二)

1.$readTime_rank_result=M('blog')->order('bReadTime DESC')->limit(3)->select(): a.返回值为数据集,可以用一下的方法在前台输出: <volist name="readTime" id="r"> {$r.Id} nbsp; {$r.Time} </br>  //或是:{$r['Id']} nbsp; {$r['Time']} </volist

android金阳光自动化测试——学习历程:自动化预备知识上&amp;&amp;下

章节:自动化基础篇——自动化预备知识上&&下 网易云课堂: 上:http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=877113&courseId=712011 下:http://study.163.com/course/courseLearn.htm?courseId=712011#/learn/video?lessonId=877114&courseId=71

强制理解背诵知识列表

u 强制理解背诵知识列表 l 操作系统:进程,线程:死锁:Linux 三十条命令,PV 原语,生产者消费者,银行家算法,信号量算法 l 计算机网络:TCP,HTTP,Web 服务器 l Java:五十个关键字:多线程,线程池,线程安全:内存分配:二十三种设计模式:代码健壮性:Spring 开源框架 l 数据库:复杂查询的 SQL 语句,SQL 优化:死锁,事务回滚,解锁:视图,索引 l 算法:排序算法:KMP 算法:Aho-Corasick 算法 u 时间:2017年02月21日-2017年05

【转载】理解矩阵(二)

原文:理解矩阵(二) 接着理解矩阵. 上一篇里说“矩阵是运动的描述”,到现在为止,好像大家都还没什么意见.但是我相信早晚会有数学系出身的网友来拍板转.因为运动这个概念,在数学和物理里是跟微积分联系在一起的.我们学习微积分的时候,总会有人照本宣科地告诉你,初等数学是研究常量的数学,是研究静态的数学,高等数学是变量的数学,是研究运动的数学.大家口口相传,差不多人人都知道这句话.但是真知道这句话说的是什么意思的人,好像也不多.简而言之,在我们人类的经验里,运动是一个连续过程,从A点到B点,就算走得最快

jqGrid 学习笔记整理——进阶篇(二)

jqGrid 学习笔记整理--进阶篇(二 ) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2.创建表 双击打开上步创建数据库--右击T

Hadoop新手学习指导之hadoop核心知识学习

上篇(Hadoop新手学习指导之入门需知)我们介绍了新手学习hadoop的入门注意事项.这篇来谈谈hadoop核心知识学习. hadoop核心知识学习: hadoop分为hadoop1.X和hadoop2.X,并且还有hadoop生态系统.这里只能慢慢介绍了.一口也吃不成胖子. 那么下面我们以hadoop2.x为例进行详细介绍: Hadoop的核心是mapreduce和hdfs. Mapreduce:mapreduce是很多人都需要迈过去的槛,它比较难以理解,我们有时候即使写出了mapreduc