如何在 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);
我是 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);