Shopware 6 后端控制器路径

Posted

技术标签:

【中文标题】Shopware 6 后端控制器路径【英文标题】:Shopware 6 backend controller path 【发布时间】:2020-11-22 16:20:35 【问题描述】:

在 shopware 6 中,我想从后端/管理页面 (javascript) 调用后端/管理 API 控制器。使用相对路径的正确方法是什么,可能带有内置的 getter 函数?

仅当商店位于 / 时,获取 /api/v1 才有效,但当它位于子文件夹中时无效。

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

【问题讨论】:

【参考方案1】:

如果您谈论的是您实现的自定义操作,您需要在 Resources\config\routes.xml 中的 routes.xml 中定义路由(使用注释)并注册控制器。

请遵循该文档 https://docs.shopware.com/en/shopware-platform-dev-en/how-to/api-controller

【讨论】:

谢谢,我完成了所有这些工作,只要商店在域根目录 (/) 上运行,我就一切正常。我需要知道但在文档中没有找到的是解决 API 控制器路由的正确方法不是以 / 开头,而是以通用后端 API 路径前缀开头。【参考方案2】:

最佳实践是编写您自己的 JS 服务来处理与您的 api 端点的通信。

我们有一个抽象的ApiService 类,你可以继承自。您可以查看CalculatePriceApiService 以获取the platform 中的示例。 对您而言,实现可能如下所示:

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 端点通信,这意味着在您发出的所有以下请求中,您都可以使用相对路由路径。

请记住,抽象 ApiService 将负责解析用于请求的配置。特别是这意味着 ApiService 将使用正确的 BaseDomain 包括子文件夹,并且它将自动使用您的商店软件版本支持的 apiVersion。这意味着每次有新的 api 版本可用时,ApiService 在路由中使用的 apiVersion 都会增加,这意味着您需要在 api 版本的后端路由注释中使用通配符。

最后请记住,您需要注册该服务。那是documented here。 对你来说,这可能看起来像这样:

Shopware.Application.addServiceProvider('myPluginService', container => 
    const initContainer = Shopware.Application.getContainer('init');
    return new MyPluginApiService(initContainer.httpClient, Shopware.Service('loginService'));
);

【讨论】:

注意“in the core”不是shopware/core,而是GitHub上的shopware/platform,所以CalculatePriceApiService的例子可以在here找到

以上是关于Shopware 6 后端控制器路径的主要内容,如果未能解决你的问题,请参考以下文章

在 shopware 6 中验证后端密码

什么是 var/plugins.json,它应该进入版本控制(Shopware 6.3.5.2)吗?

如何在 Shopware 6 中获取公用文件夹绝对路径?

Shopware 5 在前端访问控制器变量(模板变量)

注册后 Shopware 订户中的帐单地址

在 Shopware 6 中覆盖现有的插件 JS