Плагин CakeDC Forum с префиксом

Мы используем CakePHP 3.5.17 и хотели бы использовать плагин форума от CakeDC: https://github.com/CakeDC/cakephp-forum

Мы установили его с помощью Composer и добавили эту строку в файл bootstrap.php приложения:

Plugin::load('CakeDC/Forum', ['bootstrap' => true, 'routes' => true]);

Плагин работает, и мы можем перемещаться по маршрутам, используя путь: «/forum», например «mysite.com/forum».

Но нам нужно использовать плагин для префикса (скажем, «член»), и тогда он больше не работает. При переходе на «mysite.com/member/forum» возникает исключение «Отсутствует контроллер». CakePHP ищет ForumController в приложении, хотя должен искать плагин...

Мы не писали никаких конкретных маршрутов для префикса. Просто объявил это:

Router::prefix('member', function ($routes) {
    $routes->fallbacks(DashedRoute::class);
});

Мы что-то упускаем? Я думал, что маршруты CakePHP по умолчанию могут управлять маршрутами, используя структуру «/:prefix/:plugin/:controller» (согласно документу).

Вот что отслеживает CakePHP:

params => [
    'controller' => 'Forum',
    'pass' => [],
    'action' => 'index',
    'prefix' => 'member',
    'plugin' => null,
    '_matchedRoute' => '/member/:controller',
    '_ext' => null,
    'isAjax' => false
]

person Ecorce    schedule 30.05.2018    source источник
comment
не уверен, что это та же проблема, но, возможно, этот ответ может помочь.   -  person arilia    schedule 30.05.2018


Ответы (1)


Что можно сделать, так это загрузить плагин форума без маршрутов

Plugin::load('CakeDC/Forum', ['bootstrap' => true]);

И скопировать содержимое плагина форума routes.php. файл в ваше приложение route.php, заменив только ['path' => '/forum'] на ['path' => '/member/forum'].

person Andrej Gr    schedule 30.05.2018
comment
Теперь все в порядке, но все еще остается проблема: CakePHP ищет папку с префиксом в папке плагина (pluginFolder/src/Controller/Membre/CategoriesController.php). Я не хочу этого! Я не хочу, чтобы он искал папку с префиксом! Но как это предотвратить? - person Ecorce; 30.05.2018
comment
Не уверен, что понимаю вас, но что, если вместо объявления глобального префикса (Router::prefix...) вы объявите его в области видимости '/' ($routes->prefix(...) - person Andrej Gr; 30.05.2018
comment
Нет... единственным обходным путем для меня было создание префиксных папок внутри плагина, расширение основных контроллеров для каждого префиксного контроллера... и установка пути для рендеринга для каждого представления... не идеально, но не слишком много дублированных файлов . - person Ecorce; 06.06.2018