Плагин: настройка "сложного" роутинга. Вопрос

Подскажите, пожалуйста, есть ли в ЛС встроенная возможность настройки роутинга для плагина следующего типа.
Есть плагин с названием 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 комментариев

avatar
Есть несколько вариантов решения:
1.
// Для урлов вида 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');
т.е. из одного неймспейса урлов сделать несколько

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
  • ort
  • +2
avatar
Отлично, спасибо большое за ответ столь скорый!
avatar
ort ,PSNet а подскажите, пожаоуйста, по п.2. Немного не могу разобраться.
1. Как добавить в $config['router']['uri'] свои правила из плагина (на сколько понимаю, из самого конфига плагина этого сделать нельзя)?
2. Попробовал добавить свои правила в сам глобальный конфиг, в раздел
$config['router']['uri']
, после существующего правила коротких ссылок для блогов, но новый экшен, обрабатывающий урлы
/____api1/
/____api1/
так и остается не инициализированным…

Не могу понять, как и где устанавливается сама связка добавленного правила перенаправления с
/plugin/ap1/
и создания/инициализации объекта Экшена…
avatar
Вы же сами себе ответили :) только засомневались что-то, смелее, это почти так и работает)

Начнем с того что урл имеет вид:
сайт/экшен/эвент/параметр1/параметр2/.../параметрН/? параметры=запроса
экшен — глобальное пространство обозначаемое в роутере, эвент — связан с конкретным экшеном и принадлежит только ему.

На сколько я полял, настройка через конфиг плагина обеспечивает только один «уровень» роутинга?
строго по выделенному из вопроса — да, через конфиг задается только экшен.
а вообще — нет, можно назначать разные урлы разным экшенам:
Config::Set('router.page.base', 'PluginTest_ActionBase'); для сайт/base
Config::Set('router.page.api', 'PluginTest_ActionApi'); для сайт/api

а обработка эвента задается относительно экшена в котором данный эвент запускается, эвенты регистрируются посредством метода RegisterEvent экшена (см. пример любого экшена в движке)

Примечание: В лс 2.0 сделана удобная штука для больших проектов — вынесение кода эвентов по логическим группам в отдельные файлы из экшенов, но это просто заметка, к вашему вопросу она не относится.
avatar
Спасибо за ответ!
Понятно, что через конфиг плагина можно привязать разные урлы разным экшенам, но привязка будет только относительно одного «уровня», т.е., в примере из вашего комментария — относительно сайта, что имхо, недопустимо, так как потенциально является источником конфликтов и т.п.

Так что пока выбрал вариант (1) из комментария ort , если моя поделка сильно разрастется.

Еще раз спасибо за ответы!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.