По-моему, немного непонятный вопрос. Я успешно настроил префикс языка для всех моих правил маршрутизации для обработки локализации. Все отлично работает, когда пользователь запрашивает контроллеры, которые существуют в приложении (например, /users/view/4). В моем AppController приложение успешно перенаправляет любые запросы, в которых отсутствует языковой префикс, на URL-адрес, у которого он есть (например, /eng/users/view/4).
Проблема возникает, когда пользователь запрашивает неверный контроллер. В этом случае после перенаправления пользователя приложение выдает исключение MissingControllerException (которое должно быть), но контроллер, о котором оно сообщает как недействительный, является самим языковым префиксом (например, «EngController»), а не контроллером, который идет после этого в URI запроса. .
Это указывает на то, что в состоянии ошибки приложение Cake больше не знает о маршрутизации языковых префиксов. Это говорит о том, что мне нужно добавить еще одно правило маршрутизации в route.php, которое будет нацелено только на недопустимые запросы и гарантирует, что префикс языка ожидается и учитывается во всех запросах, которые обрабатываются CakeErrorController (который является основным контроллером, который берет на себя эти типы). исключений).
Но я просмотрел документы и понятия не имею, как создать такой маршрут. Спасибо за вашу помощь!
Вот мой файл route.php:
<?php
$lang_settings = ['language' => '[a-z]{3}'];
// ElStats homepage vs tenant homepage
if(!TENANT) {
Router::connect('/', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
Router::connect('/:language', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
} else {
Router::connect('/', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
Router::connect('/:language', ['controller' => 'pages', 'action' => 'index'], $lang_settings);
}
/**
* ...and connect the rest of 'Pages' controller's urls.
*/
Router::connect('/:language/pages/*', ['controller' => 'pages', 'action' => 'display'], $lang_settings);
Router::connect('/:language/contests/search/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/contests/:action/*', ['controller'=>'contests'], $lang_settings);
Router::connect('/:language/contests/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/candidates/search/*', ['controller' => 'candidates', 'action' => 'index'], $lang_settings);
Router::connect('/:language/candidates/:action/*', ['controller'=>'candidates'], $lang_settings);
Router::connect('/:language/candidates/*', ['controller' => 'candidates', 'action' => 'index'], $lang_settings);
// If just /search, then default to /contests/search
Router::connect('/:language/search/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
/**
* Full-controller alias routing
*/
// ballot_questions => contests
Router::connect('/:language/ballot_questions/search/*', ['controller' => 'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/ballot_questions/:action/*', ['controller'=>'contests'], $lang_settings);
Router::connect('/:language/ballot_questions/*', ['controller'=>'contests', 'action' => 'index'], $lang_settings);
Router::connect('/:language/admin/ballot_questions/:action/*', ['controller'=>'contests','admin' => true], $lang_settings);
Router::connect('/:language/admin/ballot_questions/*', ['controller'=>'contests', 'action' => 'index', 'admin' => true], $lang_settings);
// Admin Routing
Router::connect('/:language/admin', [ 'controller'=> 'pages', 'action'=> 'index','admin' => true], $lang_settings);
Router::connect('/:language/admin/:controller/:action/*',['admin' => true], $lang_settings);
Router::connect('/:language/admin/:controller/*',['admin' => true], $lang_settings);
Router::connect('/:language/:controller/:action/*',[], $lang_settings);
require CAKE . 'Config' . DS . 'routes.php';