CakePHP 3 префикс маршрутизации

Я пытаюсь настроить префикс маршрутизации в 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 при использовании префиксной маршрутизации

Заранее большое спасибо

0

Решение

Это просто, как префиксная маршрутизация теперь работает в 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 Компонент поддерживает переключение макета / шаблона из коробки, поэтому, возможно, вам стоит попробовать.

1

Другие решения

Префиксная маршрутизация — это способ передачи пространства имен частям ваших маршрутов к выделенному контроллеру. Кажется, что вы хотите, это область, а не префикс для того, что вы описываете:

Router::scope('/json', function($routes) {
$routes->fallbacks('InfledtedRoute')
});
0

По вопросам рекламы [email protected]