0

Kohana 会像这样自动设置 URL

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

2 回答 2

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');
于 2009-06-17T07:38:19.387 回答
0

对于我不知道的 camelCase 变体,但这样的东西应该可以工作

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

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

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

于 2009-06-17T02:40:44.093 回答