2016-11-15 75 views
1

我正在創建一個多語言站點。當設置語言參數時,我希望它是英文的,而當設置語言參數時,我希望它是英文的。CakePHP 3.x可選語言路由

我的路由看起來如下:

$routes->connect('/:language/:controller/:action/*');

的問題如下:

當我訪問www.mydomain.com/users/login它工作正常。

當我訪問www.mydomain.com/fr/users/login它工作正常(用法語)。

但是當我訪問www.mydomain.com/users/login/1其中1是一個自定義命名參數我想分析,就自然認爲users是語言和login是我的控制器和1是我的行動。

我知道,如果我強迫那裏總是一個語言參數,這將不再是一個問題,但我不希望英文版在www.mydomain.com/en/。我希望它在www.mydomain.com

這是可以實現的嗎?如果不是fres等,有沒有辦法忽略語言參數?

回答

1

您可以指定匹配路徑元素的正則表達式。所以你需要類似的東西

$routes->connect(
    '/:language/:controller/:action/*', 
    [], 
    ['language' => 'fr|es'] 
); 

請參閱CakePHP手冊/ API的更多細節。

+0

如果':language'沒有設置爲'fr'或'es',這實際上會使用普通的'/:controller /:action/*'路由嗎? @ADmad – Cellydy

+0

@Cellydy如果沒有語言前綴,則此答案中的路由定義根本不會匹配。如果你想要標準的後備路線[你需要添加它們](http://book.cakephp.org/3.0/en/development/routing.html#routes-configuration),否則URL'/ controller/action/blah'會成爲404. – AD7six

+0

@ADmad感謝您的幫助! – Cellydy