Kohana RegEx路由和区分大小写

时间:2011-12-28 10:26:42

标签: php kohana-3

我想用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)'这是“错误的”。

2 个答案:

答案 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';
    }

}

来源:https://gist.github.com/2045349