This article will provide a small example on how to extend the existing REST API resources. As of Shopware 5.2.17 the resources are loaded as services to the dependency injection container and can be easily decorated.
You only need a few files for this example plugin. For more information about necessary files and the Shopware 5.2 plugin system see the 5.2 plugin guide.
SwagExtendArticleResource/Resources/services.xml
:
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="swag_extend_article_resource.article_resource"
class="SwagExtendArticleResource\Components\Api\Resource\Article"
decorates="shopware.api.article"
public="false"
shared="false">
</service>
</services>
</container>
SwagExtendArticleResource/Components/Api/Resource/Article.php
:
<?php
namespace SwagExtendArticleResource\Components\Api\Resource;
class Article extends \Shopware\Components\Api\Resource\Article
{
/**
* @inheritdoc
*/
public function getList($offset = 0, $limit = 25, array $criteria = [], array $orderBy = [], array $options = [])
{
$result = parent::getList($offset, $limit, $criteria, $orderBy, $options);
foreach($result['data'] as &$article) {
$article['MyCustomField'] = 'CustomContent';
}
return $result;
}
}
Execute the parent getList()
function to get the original data and add your custom field to every product.
Feel free to replace this with your own implementation.
The whole plugin can be downloaded here.