我想用Kohana 3.2构建不区分大小写的路由
示例(来自Kohanas网站):
Route::set('sections', '<directory>(/<controller>(/<action>(/<id>)))',
array(
'directory' => '(admin|affiliate)'
))
->defaults(array(
'controller' => 'home',
'action' => 'index',
));
适用于:example.com/admin/home/index
,但不适用于:example.com/Admin/home/index
(首都'A')。
我该如何解决这个问题?而且我不想写类似:'directory' => '([Aa]dmin|[Aa]ffiliate)'
这是“错误的”。
答案 0 :(得分:2)
如果希望所有路由都不区分大小写,可以重载Route :: compile并返回parent::compile($uri, $regex).'i';
或将strtolower(Request::detect_uri())
传递给index.php中的Request :: factory()。
或者,如果您只希望该路由不区分大小写,则可以将其设置为使用strtolower()的lambda / callback路由。
答案 1 :(得分:2)
这是一个更好的重载方法示例:
<?php
/* APPPATH/classes/route.php */
class Route extends Kohana_Route {
public static function compile ( $uri, array $regex = NULL ) {
if ( ! is_string( $uri ) ) { return; }
return parent::compile( $uri, $regex ) . 'i';
}
}