Hallo liebe Community,
ich bin gerade dabei ein neues Plugin für Versionan ab Shopware 5.2 zu erstellen und stehe aktuell vor einen kleinen Problem.
Wahrscheinlich sieht man einfach den Wald vor lauter Bäumen nicht mehr.
Zum Problem:
Wie im neuen Plugin System üblich habe ich mein neues Plugin unter /custom/plugins/VendorFooBar hinterlegt und dort eine VendorFooBar.php erstellt, welche als Bootstrap dient.
Meine dort darin enthaltene Klasse VendorFooBar erweitert von Shopware\Components\Plugin.
Soweit so gut. Installation funktioniert, Plugin aktiviert und Event greift auch.
Nun versuche ich einen Shopware 5 Core Service zu erweitern (shopware_storefront.list_product_service) allerdings bekomme ich immer die Fehlermeldung, dass die Klasse nicht gefunden wird.
Class ‘VendorFooBar\Bundle\StoreFrontBundle\ListProductService’ not found in /www/htdocs/… on line xx
503 Service Unavailable
Laut Doku zum neuen 5.2 Plugin System sollte er die Klasse doch eigentlich an Hand des Namespaces finden. (https://developers.shopware.com/developers-guide/plugin-system/#autoloading)
Vielleicht sieht ja jemand schnell den Fehler!
Vielen dank im voraus!!
/custom/plugins/VendorFooBar/VendorFooBar.php
namespace VendorFooBar;
use VendorFooBar\Subscribers\EventSubscriber;
use Shopware\Components\Plugin;
use Shopware\Components\Plugin\Context\InstallContext;
use Shopware\Components\Plugin\Context\UninstallContext;
/**
* VendorFooBar
*
* @copyright xxx
* @author xxx
*/
class VendorFooBar extends Plugin
{
/**
* @inheritdoc
*/
public static function getSubscribedEvents()
{
return [
'Enlight_Controller_Front_StartDispatch' => 'onRegisterSubscriber',
'Shopware_Console_Add_Command' => 'onRegisterSubscriber'
];
}
/**
* @param \Enlight_Event_EventArgs $args
*/
public function onRegisterSubscriber(\Enlight_Event_EventArgs $args)
{
$subscribers = array(
new EventSubscriber()
);
foreach ($subscribers as $subscriber) {
$this->container->get('events')->addSubscriber($subscriber);
}
}
}
/custom/plugins/VendorFooBar/Subscribers/EventSubscriber.php
namespace VendorFooBar\Subscribers;
use Enlight\Event\SubscriberInterface;
use VendorFooBar\Bundle\StoreFrontBundle\ListProductService;
class EventSubscriber implements SubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
'Enlight_Bootstrap_AfterInitResource_shopware_storefront.list_product_service' => 'registerListProductService'
);
}
/**
* Register ListProductService
*/
public function registerListProductService()
{
$coreService = Shopware()->Container()->get('shopware_storefront.list_product_service');
$listProductService = new ListProductService($coreService);
Shopware()->Container()->set('shopware_storefront.list_product_service', $listProductService);
}
}
/custom/plugins/VendorFooBar/Bundle/StoreFrontBundle/ListProductService.php
namespace VendorFooBar\Bundle\StoreFrontBundle;
use Shopware\Bundle\StoreFrontBundle\Service\ListProductServiceInterface;
use Shopware\Bundle\StoreFrontBundle\Struct;
class ListProductService implements ListProductServiceInterface
{
/**
* @var ListProductServiceInterface
*/
private $service;
/**
* @param ListProductServiceInterface $service
*/
public function __construct(ListProductServiceInterface $service)
{
$this->service = $service;
}
/**
* @inheritdoc
*/
public function getList(array $numbers, Struct\ProductContextInterface $context)
{
// ...
}
/**
* @inheritdoc
*/
public function get($number, Struct\ProductContextInterface $context)
{
$products = $this->getList([$number], $context);
return array_shift($products);
}
}