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

问题描述

我是 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 用于管理(后台应用)目的,而不是用于店面。

你需要移动

用于获取数据的所有 http-client 代码

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

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

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

然后你需要扩展你的twig模板并通过

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

要添加数组数据作为扩展,您必须定义一个虚拟的 Struct 类

<?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);