URI 路由¶

一般情况下,一个 URL 字符串和它对应的控制器中类和方法是一一对应的关系。

URL 中的每一段通常遵循下面的规则:

example.com/class/function/id/

但是有时候,你可能想改变这种映射关系,调用一个不同的类和方法,而不是

URL 中对应的那样。

例如,假设你希望你的 URL 变成下面这样:

example.com/product/1/

example.com/product/2/

example.com/product/3/

example.com/product/4/

URL 的第二段通常表示方法的名称,但在上面的例子中,第二段是一个商品 ID ,

为了实现这一点,CodeIgniter 允许你重新定义 URL 的处理流程。

设置你自己的路由规则¶

路由规则定义在 application/config/routes.php 文件中,在这个文件中你会

发现一个名为 $route 的数组,利用它你可以设置你自己的路由规则。

在路由规则中你可以使用通配符或正则表达式。

通配符¶

一个典型的使用通配符的路由规则如下:

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

在一个路由规则中,数组的键表示要匹配的 URI ,而数组的值表示要重定向的位置。

上面的例子中,如果 URL 的第一段是字符串 "product" ,第二段是个数字,那么,

将调用 "catalog" 类的 "product_lookup" 方法。

你可以使用纯字符串匹配,或者使用下面两种通配符:

(:num) 匹配只含有数字的一段。

(:any) 匹配含有任意字符的一段。(除了 '/' 字符,因为它是段与段之间的分隔符)

注解

通配符实际上是正则表达式的别名,:any 会被转换为 [^/]+ ,

:num 会被转换为 [0-9]+ 。

注解

路由规则将按照它们定义的顺序执行,前面的规则优先级高于后面的规则。

注解

路由规则并不是过滤器!设置一个这样的路由:'foo/bar/(:num)' ,

Foo 控制器的 bar 方法还是有可能会通过一个非数字的参数被调用

(如果这个路由也是合法的话)。

例子¶

这里是一些路由的例子:

$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';

URL 的第一段是 "product" ,第二段是任意字符时,将重定向到 "catalog" 类的

"product_lookup" 方法。

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

URL 的第一段是 "product" ,第二段是数字时,将重定向到 "catalog" 类的

"product_lookup_by_id" 方法,并将第二段的数字作为参数传递给它。

重要

不要在前面或后面加反斜线('/')。

正则表达式¶

如果你喜欢,你可以在路由规则中使用正则表达式。任何有效的正则表达式都是

允许的,包括逆向引用。

注解

如果你使用逆向引用,你需要使用美元符号代替双斜线语法。

一个典型的使用正则表达式的路由规则看起来像下面这样:

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

上例中,一个类似于 products/shirts/123 这样的 URL 将会重定向到 "shirts"

控制器的 "id_123" 方法。

With regular expressions, you can also catch multiple segments at once.

例如,当一个用户访问你的 Web 应用中的某个受密码保护的页面时,如果他没有

登陆,会先跳转到登陆页面,你希望在他们在成功登陆后重定向回刚才那个页面,

那么这个例子会很有用:

$route['login/(.+)'] = 'auth/login/$1';

注解

In the above example, if the $1 placeholder contains a

slash, it will still be split into multiple parameters when

passed to Auth::login().

如果你还不知道正则表达式,可以访问 regular-expressions.info 开始学习一下。

注解

你也可以在你的路由规则中混用通配符和正则表达式。

回调函数¶

你可以在路由规则中使用回调函数来处理逆向引用。例如:

$route['products/([a-zA-Z]+)/edit/(\d+)'] = function ($product_type, $id)

{

return 'catalog/product_edit/' . strtolower($product_type) . '/' . $id;

};

在路由中使用 HTTP 动词¶

还可以在你的路由规则中使用 HTTP 动词(请求方法),当你在创建 RESTful 应用时特别有用。

你可以使用标准的 HTTP 动词(GET、PUT、POST、DELETE、PATCH),也可以使用自定义的动词

(例如:PURGE),不区分大小写。你需要做的就是在路由数组后面再加一个键,键名为 HTTP

动词。例如:

$route['products']['put'] = 'product/insert';

上例中,当发送 PUT 请求到 "products" 这个 URI 时,将会调用 Product::insert() 方法。

$route['products/(:num)']['DELETE'] = 'product/delete/$1';

当发送 DELETE 请求到第一段为 "products" ,第二段为数字这个 URL时,将会调用

Product::delete() 方法,并将数字作为第一个参数。

当然,使用 HTTP 动词是可选的。

保留路由¶

有下面三个保留路由:

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

This route points to the action that should be executed if the URI contains

no data, which will be the case when people load your root URL.

The setting accepts a controller/method value and index() would be

the default method if you don't specify one. In the above example, it is

Welcome::index() that would be called.

注解

You can NOT use a directory as a part of this setting!

You are encouraged to always have a default route as otherwise a 404 page

will appear by default.

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

这个路由表示当用户请求了一个不存在的页面时该加载哪个控制器,它将会覆盖默认的 404 错误页面。Same per-directory rules as with 'default_controller' apply here as well. show_404() 函数不会受影响,它还是会继续加载 application/views/errors/ 目录下的默认的 error_404.php 文件。

$route['translate_uri_dashes'] = FALSE;

从它的布尔值就能看出来这其实并不是一个路由,这个选项可以自动的将 URL

中的控制器和方法中的连字符('-')转换为下划线('_'),当你需要这样时,

它可以让你少写很多路由规则。由于连字符不是一个有效的类名或方法名,

如果你不使用它的话,将会引起一个严重错误。

php框架中uri路由机制,URI 路由 — CodeIgniter 3.1.5 中文手册|用户手册|用户指南|中文文档...相关推荐

  1. php4.0中文手册,服务 — CodeIgniter 4.0.0 中文手册|用户手册|用户指南|中文文档

    在CodeIgniter内部的所有类实际上都是以"服务"的形式呈现的.这意味着,所有的类都是以定义在一个简单的配置文件里,而非硬编码所需要加载的类名,来进行加载的. 该配置文件实际 ...

  2. php twig中文手册,使用技巧 · Twig 中文文档 · 看云

    #使用技巧 ##显示弃用通知 > Twig 1.21新增的. 被弃用的特性会产生弃用通知(通过调用PHP函数``trigger_error()`` ).默认地,弃用通知是沉默的,不会显示或记录. ...

  3. MPLAB® ICD 2/3/4在线调试器用户指南 中文文档

    1,微芯官网 手册下载 http://www.microchip.com.cn/newcommunity/index.php?m=Download&a=index&id=24& ...

  4. React官方中文文档【安装】

    https://reactjs.org/docs/getting-started.html  //React官方文档地址 1.入门 此页面是React文档和相关资源的概述. React是一个用于构建用 ...

  5. ASP.NET MVC3 学习心得------路由机制

    9.1 理解URL URL满足的要求: l 域名易于记忆和拼写 l 简短.易输入 l 可以反应出站点的结构 l 可破解,用户可以通过移除URL的末尾,进而达到更高层次的信息体系结构 l 持久.不能变化 ...

  6. Linux x86_64 APIC中断路由机制分析

    不同CPU体系间的中断控制器工作原理有较大差异,本文是<Linux mips64r2 PCI中断路由机制分析>的姊妹篇,主要分析Broadwell-DE X86_64 APIC中断路由原理 ...

  7. flask mvc模式开发_Flask中文文档-转载

    欢迎阅读 Flask 的文档.推荐您先阅读< 安装 >,然后阅读 < 快速上手 >.< 教程 >比快速上手文档更详细一点,该 文档介绍了如何创建一个完整(尽管很小) ...

  8. [中英对照]User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序...

    如对Linux用户态驱动程序开发有兴趣,请阅读本文,否则请飘过. User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序 ...

  9. biztalk在用户代码中构造多部分消息

    大家知道,biztalk中可以在orchestration调用外部用户代码进行功能扩展,调用外部方法可以把消息作为参数传给外部方法,当然也可能需要外部方法返回一个消息到orchestration.&l ...

最新文章

  1. 【记录】我在团队合作中遇到过的胎神(扑街仔)级别前端小伙伴 之 莫名其妙配置0.0.0.0这种IP访问
  2. 驱动操作硬件的根本操作
  3. 2. 两数相加(中等)
  4. Java与C#平台通信 WCF CXF SOAP
  5. [转]怎样看懂Oracle的执行计划
  6. 趁着对象泡脚的功夫,我把vueX吃透了
  7. php使用jasperreport,php-报表引擎指南(Pentaho,JasperReports,BIRT)
  8. Redefining the shading languages ecosystem with SPIR-V
  9. 人工神经网络(Artificial Neural Netwroks)笔记-消除样本顺序的BP算法
  10. WebStorm2018.2 破解 激活
  11. 关于ArrayList和Vector区别
  12. RRZCMS安全防护建议
  13. 记单词01-vict, vinc(胜利,征服)
  14. 思维导图之----javascript正则表达式知识树
  15. C/C++回溯经典练习:马的走法
  16. P1196 [NOI2002] 银河英雄传说
  17. c语言pm2.5检测系统,基于Arduino的PM2.5实时检测系统
  18. 如何使用python实现简单爬取网页数据并导入MySQL中的数据库
  19. android 布局总结
  20. USACO 2.1.3 Ordered Fractions

热门文章

  1. 科个普:进程、线程、并发、并行
  2. 使用Redis创建分布式锁
  3. [译]如何在C#中调试LINQ查询
  4. 你准备好了在云中工作吗?
  5. eShopOnContainers 看微服务 ②:配置 启动
  6. .NET Core中Object Pool的简单使用
  7. 如何面试.NET/ASP.NET工程师?
  8. 一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go
  9. .NetCore之下载文件
  10. .net core 2.0学习笔记(一):开发运行环境搭建