Плагин: настройка "сложного" роутинга. Вопрос
Подскажите, пожалуйста, есть ли в ЛС встроенная возможность настройки роутинга для плагина следующего типа.
Есть плагин с названием plugin. Плагин, помимо вывода базовой странички, реализует достаточно обширный API для некоего приложения.
В плагине есть несколько модулей, к примеру, BasePage, Api1, Api2, Api3.
Как правильно настроить роутер средствами LS, что бы была возможность обрабатывать Экшины не в одном ActionPlugin, а разнести экшины в соответствии с модулями (ActionBasePage -> BasePage, ActionApi1 —> Api1...)?
На сколько я полял, настройка через конфиг плагина обеспечивает только один «уровень» роутинга?
Т.е, нет возможности сделать как-то так (?):
Большое спасибо всем за советы и ответы!
Есть плагин с названием plugin. Плагин, помимо вывода базовой странички, реализует достаточно обширный API для некоего приложения.
В плагине есть несколько модулей, к примеру, BasePage, Api1, Api2, Api3.
Как правильно настроить роутер средствами LS, что бы была возможность обрабатывать Экшины не в одном ActionPlugin, а разнести экшины в соответствии с модулями (ActionBasePage -> BasePage, ActionApi1 —> Api1...)?
На сколько я полял, настройка через конфиг плагина обеспечивает только один «уровень» роутинга?
Config::Set('router.page.plugin', 'PluginPlugin_ActionPlugin');
Т.е, нет возможности сделать как-то так (?):
// Для урлов вида ls.tld/plugin/page Config::Set('router.page.plugin.page', 'PluginPlugin_ActionBasePage'); // Для урлов вида ls.tld/plugin/api1 Config::Set('router.page.plugin.api1', 'PluginPlugin_ActionApi1'); // Для урлов вида ls.tld/plugin/api2 Config::Set('router.page.plugin.api2', 'PluginPlugin_ActionApi2');
Большое спасибо всем за советы и ответы!
5 комментариев
1. т.е. из одного неймспейса урлов сделать несколько
2. сделать отдельные экшены (например для урлов
/____api1/
и/____api2/
), а потом через параметр конфига$config['router']['uri']
делать на них перенаправление с/plugin/ap1/
и/plugin/ap2/
3. то же, что и 2, но перенаправление делать через обработку хука
init_action
и методаRouter::Action();
В LS 2.0 экшены можно делить на отдельные классы евентов — livestreet.ru/blog/dev_documentation/15161.html
1. Как добавить в $config['router']['uri'] свои правила из плагина (на сколько понимаю, из самого конфига плагина этого сделать нельзя)?
2. Попробовал добавить свои правила в сам глобальный конфиг, в раздел , после существующего правила коротких ссылок для блогов, но новый экшен, обрабатывающий урлы
так и остается не инициализированным…
Не могу понять, как и где устанавливается сама связка добавленного правила перенаправления с и создания/инициализации объекта Экшена…
Начнем с того что урл имеет вид:
экшен — глобальное пространство обозначаемое в роутере, эвент — связан с конкретным экшеном и принадлежит только ему.
строго по выделенному из вопроса — да, через конфиг задается только экшен.
а вообще — нет, можно назначать разные урлы разным экшенам:
Config::Set('router.page.base', 'PluginTest_ActionBase');
длясайт/base
Config::Set('router.page.api', 'PluginTest_ActionApi');
длясайт/api
а обработка эвента задается относительно экшена в котором данный эвент запускается, эвенты регистрируются посредством метода
RegisterEvent
экшена (см. пример любого экшена в движке)Примечание: В лс 2.0 сделана удобная штука для больших проектов — вынесение кода эвентов по логическим группам в отдельные файлы из экшенов, но это просто заметка, к вашему вопросу она не относится.
Понятно, что через конфиг плагина можно привязать разные урлы разным экшенам, но привязка будет только относительно одного «уровня», т.е., в примере из вашего комментария — относительно сайта, что имхо, недопустимо, так как потенциально является источником конфликтов и т.п.
Так что пока выбрал вариант (1) из комментария ort , если моя поделка сильно разрастется.
Еще раз спасибо за ответы!