Hallo zusammen, ich versuche mich gerade an meinem ersten Plugin und mache dazu ein Youtube Videotutorial. Die ersten Schritte haben gut geklappt aber jetzt geht es nicht weiter…
Fehlermeldung: BirnerPlattform\Service\ObtainData::__construct(): Argument #1 ($productRepository) must be of type BirnerPlattform\Service\EntityRepositoryInterface, Shopware\Core\Framework\DataAbstractionLayer\EntityRepository given, called in /var/www/vhosts/distracted-ishizaka.176-221-46-119.plesk.page/httpdocs/var/cache/dev_h0aa30acdff67165bea2aef71fb1552a9/ContainerCVModvt/Shopware_Core_KernelDevDebugContainer.php on line 23539
Dazu habe ich 2 Dateien im Ordner „Services“ und die services.xml
- AddDataToPage.php
<?php declare(strict_types=1);
namespace BirnerPlattform\Service;
use Shopware\Storefront\Page\Product\ProductPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
class AddDataToPage implements EventSubscriberInterface
{
private $productRepository;
public function __construct(ObtainData $obtainData)
{
$this->productRepository = $obtainData;
}
public static function getSubscribedEvents(): array
{
return [
ProductPageLoadedEvent::class => 'addProductAvailability'
];
}
public function addProductAvailability(ProductPageLoadedEvent $event): void
{
$meineVariable = $this->productRepository->activeStatus('SW10000', $event->getContext());
$event->getPage()->assign(['meineVariable' => $meineVariable]);
}
}
ObtainData.php
<?php declare(strict_types=1);
namespace BirnerPlattform\Service;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
class ObtainData
{
private EntityRepositoryInterface $productRepository;
public function __construct(EntityRepositoryInterface $productRepository)
{
$this->productRepository = $productRepository;
}
public function activeStatus($productNumber, Context $context) : bool
{
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('productNumber', $productNumber));
$product = $this->productRepository->search($criteria, $context)->first();
return is_null($product) ? false : $product->active;
}
}
services.xml
<?xml version="1.0" ?><services>
<service id="BirnerPlattform\Service\AddDataToPage">
<argument type="service" id="BirnerPlattform\Service\ObtainData" />
<tag name="kernel.event_subscriber" />
</service>
<service id="BirnerPlattform\Service\ObtainData">
<argument type="service" id="product.repository" />
</service>
</services>
Generell habe ich alles genau so gemacht wie beschrieben. Laut ChatGPT ist folgendes möglich, was mir aber wenig hilft: Die in deinem Code gezeigten Dateien sehen im Allgemeinen in Ordnung aus. Es sieht so aus, als ob die Konfiguration und die Abhängigkeiten korrekt festgelegt sind. Der Fehler, den du zuvor gemeldet hast, tritt auf, weil der ObtainData
-Service nach einem Argument vom Typ EntityRepositoryInterface
verlangt, während der Container offenbar einen Service vom Typ EntityRepository
bereitstellt. Dies könnte auf eine Inkompatibilität zwischen den verwendeten Versionen von Shopware oder anderen Faktoren hinweisen.
Hat jemand eine Idee und Lust mir bei meinem ersten großen Hinderniss zu helfen?