CakePHP - маршрутизация с подстановочными знаками (ошибка контроллера не найдена) - PullRequest
0 голосов
/ 19 июня 2011

Я даже не совсем уверен, как именно это искать, но у меня есть URL

site.com/forum/controller/action

Где форум - это плагин, и в настоящее время он успешно перенаправляется на форум плагинов с

Router::connect('/forum', array('plugin' => 'forum', 'controller' => 'home', 'action' => 'index'));

Однако я хочу добавить маршрут, который соединит любой подкаталог верхнего уровня с форумом плагинов.Например,

site.com/fish/controller/action
site.com/bird/controller/action

оба перенаправят к плагину форума.Точно так же

site.com/bird

также будет перенаправлять на плагин форума.Это лучшее, что я смог придумать, и это не имеет никакого эффекта (я получаю «FishController not found»):

Router::connect('/*/:controller/:action/*', array('plugin' => 'forum'));

Самый близкий ответ, который я смог найти, в основном говорит, что это не может бытьвозможно? http://cakephp.1045679.n5.nabble.com/Routes-with-wildcards-missing-controller-errors-td1263632.html

РЕДАКТИРОВАТЬ: После еще нескольких проб и ошибок я попробовал это:

Router::connect('/:site/:controller/:action/*', array('plugin' => 'forum'));

И это работает. Может кто-нибудь объяснить это?

1 Ответ

1 голос
/ 19 июня 2011

Документация по http://api.cakephp.org/class/router#method-Routerconnect отлично объясняет это.

То, что вы сделали, создали пользовательский параметр. Cake использует массив для отслеживания параметров и того, как он знает, какой контроллер, действие и другие параметры были переданы. Маршрутизатор преобразует любые URL с 3 слешами (/) в $param['site'], $param['controller'] и $param['action'].

.

С вашего контроллера вы можете получить значение: site с помощью $this->params['site'].

...