Почему не проходит ajax запрос к плагину приложения blog

Евгений

Добрый день, коллеги.

Уже который час мучаюсь, не могу понять в чем причина.
В общем есть плагин GeoIp для приложения магазин.
Я его скопировал для приложения сайт и блог. Для сайта работает отлично, а вот с блогом проблема.
При инициализации город верно определяется, но когда хочу посмотреть полный список городов - для этого нужно послать аякс запрос к экшену плагина - то выдается ошибка:

404. Empty module and/or action after parsing the URL "/blog/geoip/popup/" (frontend/popup). Not found classes: blogFrontendPopupController, blogFrontendPopupAction, blogFrontendActions


Чтобы не было недоразумений, и лишний предирок к тому что я уже сделал:
1. в /wa-config/apps/blog/plugins.php добавил 'geoip' => true
2. в /wa-apps/blog/plugins/geoip/lib/ переименовал в blogGeoip.plugin.php, в самом плагине изменил название класса и расширяемого класса на: class blogGeoipPlugin extends blogPlugin
3. в /wa-apps/blog/plugins/geoip/lib/config/plugin.php стоит: 'frontend' => true, 'handlers' => array('frontend_header' => 'frontendHeader')
4. в /wa-apps/blog/plugins/geoip/lib/config/routing.php

return array(
    'geoip/popup/' => 'frontend/popup',
    'geoip/setregion/' => 'frontend/setregion',
);

5. в /wa-apps/blog/plugins/geoip/lib/actions/frontend переименовал экшн на blogGeoipPluginFrontendPopup.action.php, в нем же изменил название класса на: class blogGeoipPluginFrontendPopupAction extends waViewAction
6. в /wa-apps/blog/plugins/geoip/lib/actions/frontend переименовал контроллер на blogGeoipPluginFrontendSetregion.controller.php, в нем же изменил название класса на: название класса на: class blogGeoipPluginFrontendSetregionController extends waJsonController

Вопрос:
почему при запросе к экшену, выдается 404 ошибка и как это исправить?



6 марта 2016
  • Syrnik.com 6 марта 2016 09:05

    Оно не может найти blogFrontendPopupAction. А у вас это называется blogGeoipPluginFrontendPopupAction. С этим надо что-то делать. Либо роутинг исправить, либо класс переименовать. Думаю первое.

  • Евгений 6 марта 2016 09:39

    Пробовал переименовать - и название класса, и сам файл и по отдельности и вместе - не помогает
    По поводу роутинга - что именно менять?

  • Алексей Webasyst 6 марта 2016 11:14

    А не проще было не дублировать плагин, а просто вызывать в шаблоне класс из приложения магазин?

  • Михаил Проектов 14 марта 2016 13:16

    Разобрались?

    Не знаю баг или так задумано, но при сборе маршрутов из конфигураций плагинов в методе blogConfig->getRouting() не заполняется параметр plugin для маршрутов.

    При этом plugin заполняется в приложении site - siteConfig->getRouting():

    /wa-apps/site/lib/config/siteConfig.class.php:43
    $route['plugin'] = $plugin;
    

    и аналогично в приложении shop - shopConfig->getRouting:

    /wa-apps/shop/lib/config/shopConfig.class.php:135
    if (!array_key_exists('plugin', $route)) {
      $route['plugin'] = $plugin;
    }
    

    Получается для приложения blog во frontend основной контроллер waFrontController в методе execute() выполняет поиск класса экшна или контроллера только с использованием $module и $action.

    Это ответ на вопрос "Почему?"

    Можно обойти сие странное различие в конфигурации приложений, указав plugin явно в routing.php для плагина:

      'geoip/popup/' => array(
        'module' => 'frontend',
        'action' => 'popup',
        'plugin' => 'geoip',
      )
    

    Тогда все будет работать аналогично shop и site.



Чтобы добавить комментарий, зарегистрируйтесь или войдите