Маршрутизация префикса cakephp 3

Я пытаюсь настроить префикс маршрутизации в cakephp 3, чтобы любые URL-адреса, начинающиеся с / json /, получали набор ключей префикса, и я мог соответствующим образом изменить макет в контроллере приложения. В остальном они должны использовать обычный контроллер и действие. Я добавил следующее в routes.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 / Контроллер / UsersController.php

Я думаю, что это должно быть возможно, но я не совсем понимаю, что делаю не так, когда смотрю книгу. Частично основываю свой код на: имени контроллера CakePHP3.x в URL-адресе при использовании префиксной маршрутизации

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


person TimSpEdge    schedule 25.03.2015    source источник


Ответы (2)


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

person ndm    schedule 25.03.2015
comment
Спасибо, что указали мне правильное направление. Похоже, функциональность RequestHandler - это именно то, что мне нужно. - person TimSpEdge; 26.03.2015

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

Router::scope('/json', function($routes) {
    $routes->fallbacks('InfledtedRoute')
});
person José Lorenzo Rodríguez    schedule 26.03.2015
comment
Это сработало, чтобы направить мой запрос в нужное место, но в моем AppController я не мог понять, как определить, в какой области я нахожусь, и соответственно изменить макет. - person TimSpEdge; 26.03.2015
comment
Расположение? Почему вы не используете автоматические просмотры Json? book.cakephp.org/3.0/en/views/ json-and-xml-views.html - person José Lorenzo Rodríguez; 27.03.2015