AJAX с Frontend в экшн или контроллер

Прочитал все имеющиеся статьи на форме и документацию, но так и не понял, что могу делать не так.

https://developers.webasyst.ru...

https://developers.webasyst.ru...

https://developers.webasyst.ru...

Шаг 1. Создал файл wa-apps/shop/plugins/cartsmanager/lib/config/plugin.php

<?php
return array(
    'name' => 'Carts Manager',
    'img'  => 'images/icon.png',
    'version' => '0.0.1',
   'rontend' => true,
);

Шаг 2. Добавил в файл: wa-apps/shop/plugins/cartsmanager/lib/config/routing.php

<?php
return array(
    'cartsmanager/incart/' => array(
        'plugin' => 'cartsmanager',
        'module' => 'frontend',
        'action' => 'incart',
    ),
);


Шаг 3. Создал файл: wa-apps/shop/plugins/cartsmanager/lib/actions/frontend/shopCartsmanagerPluginFrontendCart.action.php

<?php
class shopCartsmanagerPluginFrontendCartActions extends waJsonActions
{
    public function incartAction()
    {
        $this->response = array(
            'valA' => 'value first',
            'valB' => 'velue second',
        );
    }
 
}

Шаг 4. Пытаюсь получить данные так:

<script>
  $.getJSON({$wa->getUrl('shop/frontend/incart', ['plugin' => 'cartsmanager'])}, function (json) {
    alert(json.data.valA);
  });
</script>

Получаю ошибку 404 из-за того, что это:

{$wa->getUrl('shop/frontend/incart', ['plugin' => 'cartsmanager'])}

не отрабытавает, как я ожидаю и возвращает почему-то: "/"

Попытался написать прямой путь:

<script>
  $.getJSON('/cartsmanager/incart/', function (json) {
    alert(json.data.valA);
  });
</script>

Также выдает ошибку 404:


8 ответов

  • 1
    Katvizkiy Stanislav 31 мая 2024 15:03 #

    Может правильнее писать роутинг через хук?

    https://developers.webasyst.ru...

  • 1
    Михаил Ушенин 31 мая 2024 17:04 #

    class shopCartsmanagerPluginFrontendCartActions

    Имя класса должно быть shopCartsmanagerPluginFrontendActions — идентификатор модуля ведь 'frontend':

    return array(
        'cartsmanager/incart/' => array(
            'plugin' => 'cartsmanager',
            'module' => 'frontend', // ← ← ←
            'action' => 'incart',
        ),
    );

    • +1
      Katvizkiy Stanislav Katvizkiy Stanislav 31 мая 2024 20:21 #

      Большое вам спасибо!
      Поправил этот момент, но ошибка остается (((

      Эта штука:

      $wa->getUrl('shop/frontend/incart', ['plugin' => 'cartsmanager']

      выдает: "/my/" - это же неправильно?

      Получается, что этот роут не находит:

      return array(
          'cartsmanager/incart/' => array(
              'plugin' => 'cartsmanager',
              'module' => 'frontend',
              'action' => 'incart',
          ),
      );
      

      • +1
        Katvizkiy Stanislav Katvizkiy Stanislav 31 мая 2024 20:27 #

        Еще так пробовал:

        $route_params = array(
          'module' => 'frontend',
          'plugin' => 'cartsmanager',
          'action' => 'incart',
        );
        
        var_dump(wa()->getRouteUrl('shop', $route_params)); // "/my/"

  • 1
    Николай Иванов 1 июня 2024 08:51 #

    Шаг 1, опечатка.

    'rontend' => true,

    'frontend' => true,

    • +1
      Katvizkiy Stanislav Katvizkiy Stanislav 1 июня 2024 09:16 #

      Спасибо большое Николай!
      Это уже тут я допустил опечатку, когда при редактировании пришлось удалять лишние символы, немного криво работает визуальный редактор тут, на сервере написано правильно.
      Благодарен вам за ваше время ?

      return array(
        'name' => 'Carts Manager',
        'img'  => 'images/icon.png',
        'version' => '0.0.1',
        'frontend' => true,
      );

      • +1
        Николай Иванов Николай Иванов 1 июня 2024 20:45 #

        Ну если всё верно, но ничего не работает, то возможно вы не чистите кэш фрэймворка? Правила "роутинга" кэшируются.

  • 1
    Anton F 1 июня 2024 10:01 #

    Лень расписывать все косяки, сделайте по аналогии
    роутинг

    return [
        'cartssave/' => 'frontend/save',
    ];

    контроллер

    class shopCartsPluginFrontendSaveController extends waJsonController {
        public function execute() {
        }
    }
    

    ссылка

    $wa->getUrl('shop/frontend/save', ['plugin'=>'carts'])

Эта тема в архиве. Добавление комментариев к ней отключено.