如何在 Shopware 6 中订阅 API 获取的数据?

How to subscribe the API fetched data in Shopware 6?

我是 Shopware 的初学者。我需要从外部 API 获取数据并将其显示在 Shopware 店面中。到目前为止,我已经在文件夹 Core/Api/ 中创建了一个 REST API,我在其中编写了所有 http-client 代码来获取数据。

我的路线是这样的:

@Route("/api/v{version}/_action/rest-api-handling/test", name="api.custom.rest_api_handling.test", methods={"GET"})

根据文档 https://docs.shopware.com/en/shopware-platform-dev-en/how-to/register-subscriber ,我需要创建一个订阅者来显示数据。

class FooterSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            StorefrontRenderEvent::class => 'onFooterPageLoaded'
        ];
    }

    public function onFooterPageLoaded(StorefrontRenderEvent $event): array
    {
        return [
            "array"
        ];
    }
}

但我不确定如何调用我的 Route

谁能帮帮我。

谢谢。

我认为您不需要 API 路由。首先,API 用于管理(后台应用)目的,而不是用于店面。

你需要搬家

all the http-client codes to fetch data

一些自己的服务。然后,您可以通过容器将新服务注入您的订阅者,并在您的 onFooterPageLoaded() 方法中调用类似 $this->externalApiService->getData() 的内容。

要添加一些数据(扩展页脚数据),您需要向 pagelet 添加扩展,例如

$event->getPagelet()->addExtension('my_data', $data);

然后您需要扩展您的树枝模板并通过

访问您的数据
page.footer.extensions.my_data

要将数组数据添加为扩展,您必须定义一个虚拟结构 class

<?php

namespace MyPlugin\Struct;

use Shopware\Core\Framework\Struct\Struct;

class ApiDataStruct extends Struct
{
 /**
 * @var array
 */
protected $data;

/**
 * @return array
 */
public function getData(): array
{
    return $this->data;
}

/**
 * @param array $data
 */
public function setData(array $data): void
{
    $this->data = $data;
}

}

然后在订阅者中创建该对象的实例

$data = new ApiDataStruct();
$data->setData($this->externalApiService->getData());

$event->getPagelet()->addExtension('my_data', $data);