Путь к внутреннему контроллеру Shopware 6 - PullRequest
1 голос
/ 02 августа 2020

В Shopware 6 я хочу вызвать контроллер API серверной части / администратора со страницы базы данных / администратора (javascript). Как правильно использовать относительный путь, возможно, со встроенной функцией получения?

Получение /api/v1 работает только в том случае, если магазин находится на /, но не в подпапке.

fetch('/api/v1/my-plugin/my-custom-action', ...)

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Лучше всего написать свой собственный JS сервис, который обрабатывает связь с вашей конечной точкой api.

У нас есть абстрактный ApiService класс, от которого вы можете наследовать. Вы можете взглянуть на CalculatePriceApiService в качестве примера в платформе . Для вас реализация может выглядеть так:

class MyPluginApiService extends ApiService {
    constructor(httpClient, loginService, apiEndpoint = 'my-plugin') {
        super(httpClient, loginService, apiEndpoint);
        this.name = 'myPluginService';
    }

    myCustomAction() {
        return this.httpClient
            .get('my-custom-action', {
                headers: this.getBasicHeaders()
            })
            .then((response) => {
                return ApiService.handleResponse(response);
            });
    }
}

Обратите внимание, что ваша служба api предварительно сконфигурирована для взаимодействия с вашей конечной точкой my-plugin в первой строке конструктора, что означает, что во всех следующих запросах вы make вы можете использовать относительный путь маршрута.

Имейте также в виду, что абстрактный ApiService позаботится о разрешении конфигурации, используемой для запросов. В частности, это означает, что ApiService будет использовать правильный BaseDomain, включая подпапки, и автоматически использовать apiVersion, который поддерживается вашей версией программного обеспечения. Это означает, что apiVersion, который ApiService использует в маршруте, будет увеличиваться каждый раз, когда будет доступна новая версия api, а это означает, что вам нужно работать с подстановочными знаками в аннотациях вашего внутреннего маршрута для версии api.

необходимо зарегистрировать эту службу. Это задокументировано здесь . Для вас это может выглядеть так:

Shopware.Application.addServiceProvider('myPluginService', container => {
    const initContainer = Shopware.Application.getContainer('init');
    return new MyPluginApiService(initContainer.httpClient, Shopware.Service('loginService'));
});
0 голосов
/ 02 августа 2020

Если вы говорите о реализованном вами настраиваемом действии, вам необходимо определить маршрут (использовать аннотацию) и зарегистрировать контроллер в маршрутах. xml в ваших ресурсах \ config \ routes. xml.

Следуйте этой документации https://docs.shopware.com/en/shopware-platform-dev-en/how-to/api-controller

...