Я пытаюсь настроить префикс маршрутизации в cakephp 3, чтобы любые URL-адреса, начинающиеся с / json /, получали набор префиксных ключей, и я могу соответствующим образом изменить макет в контроллере приложения. Кроме этого, они должны использовать обычный контроллер и действия. Я добавил следующее в rout.php
$routes->prefix('json', function($routes) {
$routes->connect(
'/:controller/:action/*',
[],
['routeClass' => 'InflectedRoute']
);
});
Я хочу направить все запросы с json в качестве первого сегмента URL на контроллер, указанный во втором сегменте URL. например / json / users / add_account_type / переходит к контроллеру пользователей. Однако при доступе к этому URL я получаю сообщение:
Ошибка: создайте класс UsersController ниже в файле:
SRC / Controller / Json / UsersController.php
тогда как я хочу, чтобы он использовал
SRC / Controller / UsersController.php
Я думаю, что это возможно, но я не совсем понимаю, что я делаю не так, когда обращаюсь к книге. Частично основали мой код на: Имя контроллера CakePHP3.x в URL при использовании префиксной маршрутизации
Заранее большое спасибо
Это просто, как префиксная маршрутизация теперь работает в 3.x, как объяснено в документации, префиксы отображаются в подпространствах имен и, таким образом, для разделения контроллеров в подпапках.
http://book.cakephp.org/3.0/en/development/routing.html#prefix-routing
Если вы хотите изменить это поведение (я не очень понимаю, почему), одним из способов будет реализация ControllerFactory
диспетчерский фильтр.
http://book.cakephp.org/3.0/en/development/dispatch-filters.html
На заметку, RequestHandler
Компонент поддерживает переключение макета / шаблона из коробки, поэтому, возможно, вам стоит попробовать.
Префиксная маршрутизация — это способ передачи пространства имен частям ваших маршрутов к выделенному контроллеру. Кажется, что вы хотите, это область, а не префикс для того, что вы описываете:
Router::scope('/json', function($routes) {
$routes->fallbacks('InfledtedRoute')
});