2010-08-29 70 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