2010-08-29 71 views
2

假设我想制作一个能够支付多种语言网络项目的系统。该系统将包含放在Kohana标准目录modules中的模块。假设对特定语言的标准访问可以通过参数lang(即somesite.com/ en/somepage)完成。问题是我不得不重复自己定义我的模块路线,每个uri前缀(<lang>)。有什么办法可以避免这种情况?我想过一个单独的语言路由声明(例如在bootstap.php文件中),但我想它不会解决问题。如何不重复Kohana 3的路线?

这都是关于Kohana 3.感谢所有。

UPDATE: 我认为,由像素开发商建议的方法是什么,如果在路由规则的某些部分重复到处都需要。

回答

2

向上移动一层并延伸路线类。

http://github.com/kohana/core/blob/master/classes/kohana/route.php#L69

public static function set($name, $uri, array $regex = NULL) 
{ 
    return parent::set($name, '(<lang>)'.$uri, $regex); 
} 

没有测试,但这是一般的想法。

+0

hm。有趣的想法。为什么我没有想到它。我稍后再尝试并更新问题。 – franzose 2010-08-29 14:55:39

+0

没问题。如果它是正确的,不要忘记接受答案。如果你有很高的接受率,人们将来会更有可能提供帮助。 – 2010-08-29 15:41:20

+0

当然,我一定会在尝试完之后立即做到这一点! – franzose 2010-08-30 05:39:21

2

如果在路由中需要lang,为什么不把它放在默认路由中呢?当然,这是最简单的方法。例如:

Route::set('default', '<lang>(<controller>(/<action>(/<id>)))', array('lang'=> '[a-z]{2}')) 
->defaults(array(
    'controller' => 'somepage', 
    'action'  => 'index', 
    'lang'  => 'en', 
)); 

其中lang是任何2个字母的字母,默认为'en'。

+0

也许我不太理解路由系统,但在这种情况下,我必须在每一条我定义的路线中放入,不是吗?现在我无法验证我已经得到的所有方式,但我想像素开发人员是正确的......在接下来的几个小时内,我会尝试。 – franzose 2010-08-30 05:44:42

+0

是的,你需要把它放在每一条路线上。请参阅此页面以获得更优雅的示例:http://kerkness.ca/wiki/doku.php?id=routing:multi-language_with_a_route – syaz 2010-08-30 06:17:26