Falsches Repository vom Container?

Moin!

Ich habe grade rausgefunden, dass ich vom Container eine falsche Dependency bekomme.
$container->get('sales_channel.repository'); gibt mir ein SalesChannelRepositoryDecorator vom Social-Shopping-Plugin zurück, statt des erwarteten EntityRepository.

Scheinbar gibt es beim Social-Shopping ein swag_social_shopping_sales_channel.repository und nun frage ich mich, ob es hier zu „Verwechselungen“ kommen kann und vor allem wie ich das lösen kann.

Hat jemand eine Idee?

Hallo @lukdiekm,

anscheinend wird das Repository vom Social Shopping Plugin überschrieben/ersetzt. Solange das Plugin installiert und aktiviert ist, wird es auch so bleiben.

Ob dies zu Fehlern oder ähnliches führen kann hängt von der Implementierung ab.

vg

Das Plugin dekoriert sales_channel.repository. Das ist ein übliches Pattern. Der Decorator implementiert EntityRepositoryInterface. Dieses Interface sollte generell als Type Hint verwendet werden anstatt EntityRepository, um Decorations zu erlauben.

Verwenden Sie EntityRepositoryInterface
anstelle von EntityRepository

Hallo,

EntityRepositoryInterface ist mit Version 6.5.0.0 deprecated, dies ist also keine wirklich gute Lösung. EntityRepository ist schon der richtige Weg (auch mit Hinblick auf ab Version 6.5.0.0) - wäre da nicht das SwagSocialShopping - Plugin (derzeit) im Weg.

Grüße
Sebastian

1 „Gefällt mir“

Ja, Sie haben sehr recht. Mir ist aufgefallen, dass die Verwendung von EntityRepositoryInterface diesen Fehler nicht ausgibt.

Normalerweise sollte ein Decorator Zugriff auf den decorated Service ermöglichen, z.B. über eine Methode getDecorated().

Außer natürlich da wurde mit der gleichen Sauberkeit gearbeitet, die auch zum Überschreiben der Service-ID geführt hat.