| 状态 | 草稿 |
|---|---|
| Todo | Expand, add examples |
| 官方最后更新时间 | 2008/11/10 15:05 |
通常情况下,一个URI将一对一映射到一个控制器类或者方法,在必要时并提供实参。例如,
http://www.example.com/class/function/arg1/arg2
第一分段是控制器类,第二分段是类的方法,其他分类则是方法中的参数。
事实上,无论如何,你想改变分段方法时,比如,你想使用这样的URIs:http://www.example.com/article/22。这里第二分段式文章的 ID 这是一个参数,不是控制器方法。那么使用 Kohana routes 的特性可以改变控制器和方法的 URIs 映射。
为了改变路由我们需要把 system/config 目录下的 routes.php 复制到 application/config 目录下面。
默认的 routes.php 文件是这样的:
$config['_default'] = 'welcome';
$config['_default'] 指定了默认的 route 。它是用来说明哪些控制器当URI没有包括参数而使用。例如,如果你的 Web 程序是地址是 http://www.example.com,当你访问这个链接时,如没有特别指定URI则会调用 welcome 控制器,效果和 http://www.example.com/welcome 是一样的。
当然除了系统默认的我们也可以自己制定路由,比如:
$config['route'] = 'class/method';
当 route 是你想要的URI时,你也可以使用自己的替换 class/method 。
举个例子,如果你的 Web 程序是地址是www.example.com,你设置的路由是:
$config['test'] = 'foo/bar';
那么当你访问 http://www.example.com/tst 是你想会看到访问 http://www.example.com/foo/bar 的效果。
路由(Route)还支持使用正则表达。 如果你对正则表达式不熟悉,你可以在 PHP 网站查阅相关资料。使用正则表达式,可以匹配更多的 URIs ,你可以利用子模式回到引用技术再重使用替换的 URI 。
下面是一个最好的例子。如果我们想要匹配类似这样的地址:http://www.example.com/article/22 ,我们应该使用下面的路由 :
$config['article/([0-9]+)'] = 'news/show/$1';
它将配对以 ‘article’ 开头后面跟着数字的URLs,对于这种格式的URL,将会采用 news 控制器,访问 show() 方法。article number 将作为 show() 方法的参数,在http://www.example.com/article/22中相当于访问 http://www.example.com/news/show/22
下面有几个公开的 Router 类的属性,在实例化路由之后可以使用。
返回使用路由中 URL 的部分。例如,如果 URL 是 http://localhost/welcome/index/var1?var2=2,那么返回
welcome/index/var1
如果 URL 是 http://localhost/,则返回默认的路由。
Return Router::$current_uri appended with Router::$query_string.
通过路由 Router::$current_uri 返回定义的路由 URI。
默认路由配置 $routed_uri 将会匹配 $current_uri。如果你配置了路由
$config['test'] = 'foo/bar';
那么请求 URL http://localhost/test,这个默认返回的字符串就是
foo/bar
如果在 config.php 中配置并使用在当前请求中则返回请求 URL 的后缀。
如果,你配置的 URL 后缀为 .html 且请求的 URL 是 http://localhost/welcome.html,那么返回字符串
.html
使用 Router::$current_uri 返回当前 URL 分散后的分段到数组中。
例如,如果 Router::$current_uri 包含
welcome/index
分段,则返回数组
array('welcome', 'index');
使用 Router::$routed_uri 返回分散后的分段到数组中。
例如,如果 Router::$routed_uri 包含
welcome/index
分段,则返回数组
array('welcome', 'index');
返回请求路由的控制器名。
例如,一个名为 welcome 的控制器(类名:Welcome_Controller)被调用,不论如何请求路由,均返回字符串
welcome
它不包括控制器文件存在在任何子目录,只有控制器自身的名称。
例如,返回在控制器文件的绝对路径。例如,如果 Kohana 安装设置在 /var/www/ 目录中兵器一个名为 welcome 控制器会被调用,这时就会返回字符串
/var/www/application/controllers/welcome.php
返回请求路由方法的名称。
例如,名为 welcome 的控制器中的 index 方法被调用,不论如何请求路由,均返回字符串
index
返回 URL 分段去除控制器和方法之外的数组(即返回控制器方法中的参数)
例如,使用默认路由配置,当 URL 是 http://localhost/welcome/index/var1/var2?var3=3&var4=4,则返回数组
array('var1', 'var2');