当Kohana中有连字符时,是否有通用的方法来路由Kohana?

时间:2009-06-17 01:49:40

标签: php kohana

Kohana会自动设置这样的网址

http://www.example.com/controller/method/argument1/argument2/etc

现在我喜欢用破折号分隔我在URL中的单词,我有一个像这样的地址

http://www.example.com/business-hub

我的控制器标题为BusinessHub_Controller。令我讨厌的是/ business-hub /匹配BusinesHub控制器,我需要在application / config文件夹下的routes.php中添加一个自定义条目。我似乎还要为每个方法添加一个,这真的很烦人。例如,这是摘录,

$config['business-hub'] = 'businesshub/index/';

$config['business-hub/logout'] = 'businesshub/logout';

$config['business-hub/media-releases'] = 'businesshub/mediareleases';

显然,这真的很烦人。无论如何,我可以告诉Kohana将URL转换为camelCase名称,如

$urlController = 'business-hub';

$correctController = str_replace('-', ' ', $urlController);

$correctController = ucwords($correctController);

$correctController = str_replace(' ', null, $correctController);

$correctController = $correctController . '_Controller';

2 个答案:

答案 0 :(得分:2)

不是仅仅删除破折号,而是将它们转换为下划线;我会用钩子做的。确保在config / config.php中启用了挂钩,然后在挂钩中创建一个名为dashes_to_underscores.php的文件:

function convert_dashes_to_underscores_in_url()
{
    Router::$current_uri = str_replace('-', '_', Router::$current_uri);
}

Event::add_before(
    'system.routing',
    array('Router', 'setup'),
    'convert_dashes_to_underscores_in_url');

答案 1 :(得分:0)

对于camelCase变种,我不知道,但这样的事情应该起作用

$config['(a-z)+-?(a-z)*/(a-z)+-?(a-z)*'] = '$1$2/$3$4';

由于kohana中的路线部分是正则表达式。

当然,这仅限于您提供的案例。