2016-11-15 4 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.

Возможно ли это? Есть ли способ игнорировать параметр языка, если он не fr или es и т. Д.?

ответ

1

Вы можете указать регулярное выражение для сопоставления элементов маршрута. Поэтому вам нужно что-то похожее на

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

Для получения более подробной информации обратитесь к руководству CakePHP/API.

+0

Будет ли это использовать обычный '/: controller /: action/*' маршрутизацию, если ': language' не установлен в' fr' или 'es'? @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

Смежные вопросы