CodeIgniter框架URL路由总结


Posted in PHP onSeptember 03, 2014

URI 路由

一般来说,URI字符串有着和它唯一对应的控制器(controller)类/方法。URI的各个部分是如下模式(pattern):

example.com/class/function/id/

然而在一些例子中,你也许想重定向这种关系来调用一个不同的类/方法(class/function),而不是与URL一一对应(的调用).

例如,你可能想使你的URL采用这种原型(prototype):

example.com/product/1/

example.com/product/2/

example.com/product/3/

example.com/product/4/

一般情况下,URL的第二个部分表示方法名,不过在上面的例子中,它表示一个产品的ID。CodeIgniter可以实现这个功能,让用户可以重新定向(remap)URI处理程序.

设定你自己的路由规则

路由规则定义在application/config/routes.php 文件中. 在此文件中,你可以看到一个名为 $route的数组,它可以让你定义你自己的路由规则。 定义可以用两种方式: 通配符(wildcards) 或者 正则表达式(Regular Expressions)

通配符

一个典型的通配符路由看起来是这样的:

$route['product/(:num)'] = "catalog/product_lookup";

在一个路由中,数组的键包含着被匹配的URI,而数组的值包含着路由将被重定向的目的地.在上面的例子中,如果单词“product”出现在URL的第一个部分中,而且数字(:num)出现在URI的第二个部分中,"catalog"类和"product_lookup"方法将被替代使用(即将被重定向).

你可以匹配文字的值或者使用以下两种通配符类型:

:num 将匹配一个只包含有数字的segment(段).

:any 将匹配任何字符(可以是多个segment段).可以匹配多个值,如:

$route['product/(:any)'] = "catalog/product_lookup/$1/$2/$3/$4/$5"; //将整条url上的每一个参数全部传递给catalog控制器下的 product_lookup方法。

注意: 路由将会按照定义的顺序来运行.高层的路由总是优先于低层的路由.

例子

下面是一些简单的例子:

$route['journals'] = "blogs";

如果URL的第一个分段(类名)是关键字"journals",那么将会重定向到"blogs"类中处理.

$route['blog/joe'] = "blogs/users/34";

如果URL的前两个分段是"blog"和"joe",那么将会重定向到"blogs"类的"users"方法中处理.并且将ID"34"设为参数.

$route['product/(:any)'] = "catalog/product_lookup";

当"product"作为URL中第一个分段时, 无论第二分段是什么都将被重定向到"catalog"类的"product_lookup"方法.

$route['product/(:num)'] = "catalog/product_lookup_by_id/$1";

当“product”作为 URL 中第一个分段时,如果第二分段是数字,则将被重定向到“catalog”类,并传递所匹配的内容到“product_lookup_by_id”方法中。

重要提示: 不要在前面或后面加"/".

正则表达式

如果你喜欢可以使用正则表达式来自定义你的路由规则. 任何有效的正则表达式都是被允许的, 甚至逆向引用.

注意: 如果你使用逆向引用请将双反斜线语法替换为美元符语法(\\1 替换为 $1).

一个典型的正则表达式看起来像下面的样子:

$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";

上例中, 类似于 products/shirts/123 的URI 将换成调用 shirts 控制器类的 id_123 方法.

你也可以混合使用通配符与正则表达式.

系统保留的路由

系统会保留两个路由:

第一个为系统默认的路由:

$route['default_controller'] = 'welcome';

这个路由表明了当URI中不包含要访问的类和控制器信息的(即只访问根目录的情况,如http://localhost/ci)将要加载哪个控制器。上例中,系统将加载 "welcome" 这个类(控制器)。你应该保证设置一个默认路由,不然你的首页将会显示 404 错误。

第二个为404页面的路由:

$route['404_override'] = '';

这个路由标识了如果请求的控制器无法访问的时候将加载哪个控制器。它相当于覆盖了默认的404错误页面(即提供了自己定义404页面的功能)。但它不会影响show_404()这个方法,这个方法依然会加载默认的位于application/errors/error_404.php的error_404.php页面。

重要: 保留的路由应该在所有通配符或正则表达式路由之前定义。

PHP 相关文章推荐
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
Jan 09 PHP
php注册登录系统简化版
Dec 28 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
Aug 01 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 PHP
thinkPHP分页功能实例详解
May 05 PHP
php微信开发之音乐回复功能
Jun 14 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 PHP
在 Laravel 6 中缓存数据库查询结果的方法
Dec 11 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 PHP
Yii 快速,安全,专业的PHP框架
Sep 03 #PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 #PHP
Yii中render和renderPartial的区别
Sep 03 #PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 #PHP
Fedora下安装php Redis扩展笔记
Sep 03 #PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 #PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 #PHP
You might like
destoon实现调用图文新闻的方法
2014/08/21 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
JavaScript 常用函数
2009/12/30 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
浅析javascript中函数声明和函数表达式的区别
2015/02/15 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
详谈javascript异步编程
2016/02/21 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
angularjs ui-router中路由的二级嵌套
2017/03/10 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
python模拟鼠标拖动操作的方法
2015/03/11 Python
python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python 格式化输出百分号的方法
2019/01/20 Python
Python实现的微信支付方式总结【三种方式】
2019/04/13 Python
Django Celery异步任务队列的实现
2019/07/24 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
构建高效的python requests长连接池详解
2020/05/02 Python
python 写一个性能测试工具(一)
2020/10/24 Python
快速创建python 虚拟环境
2020/11/28 Python
加拿大最大的钻石商店:Peoples Jewellers
2018/01/01 全球购物
Lookfantastic葡萄牙官方网站:欧洲第一大化妆品零售商
2018/03/17 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
党委班子对照检查材料
2014/08/19 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis