问题描述
我是 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);