Abfragen von Kundendaten über Plugin?

Hallo Community,

ich stehe vor einem kleinen Problem bei dem ich nicht weiter komme, vielleicht hat jemand von euch eine Idee, wie ich das lösen könnte.

Zur Schilderung: Ich habe mein erstes Testplugin erstellt, das hat über die Dokumentation schon recht gut funktioniert, ein Subscriber ist eingerichtet, der ausgeführt wird wenn eine bestimmte Seite geöffnet wird. Soweit klappt das alles. Nun bräuchte ich in einer Variable/Array, in diesem Beispiel $CustomerData, die Daten des Kunden, also sprich Kunden Id etc.

Nun habe ich bereits heraus gefunden, zumindest denke ich das, dass ich die benötigten Daten über die CustomerEntity abfragen kann.

Diese habe ich über „use Shopware\Core\Checkout\Customer\CustomerEntity;“ hinzugefügt, nur komme ich nicht dahinter, wie ich daraus die Kundendaten beziehen kann. Mein Beispiel habe ich als Screenshot angefügt:

Es wäre super, wenn Ihr mir einen Hinweis geben könntet oder zumindest einen Anhaltspunkt, wie ich die Kundendaten über die CustomerEntity in die Variable/Array bekommen könnte.

In der CustomerEntity gibt es unter Anderem die Funktion " getCustomerNumber()", das wäre ja genau das, was ich benötigen würde, aber wie kann ich diese Funktion ansprechen?
Ich kann eine neue Class erstellen, basierend auf der CustomerEntity (über new CustomerEntity), allerdings habe ich dann ja nur ein komplett leeres Objekt.

Vielen Dank schon mal im Voraus

Du musst deiner Class das CustomerEntity als Argument dem Service mit übergeben, dann per __construct auf einer Class property zuweisen und dann kannst du in deiner Function über das Entity, Criteria und dem event auf die Daten zugreifen.

Hallo Max_Shop, erst mal vielen Dank für deine Antwort.

Wenn ich das richtig verstanden habe, dann meinst du mit „als Argument dem Service mit übergeben“, dass ich es in meiner services.xml mit übergebe?

Das habe ich jetzt so gemacht:

Ich habe jetzt in meinem Subscriber eine Class erstellt die ich „Kundendaten“ genannt habe. Diese habe ich über „extends CustomerEntity“ an die Customer Entity angeknüpft, das dürfte soweit richtig sein, oder?

Darin habe ich die Funktion __construct erstellt
Code_2021-12-06_160209_119

Aber wie, bzw. welche Properties weise ich dort zu um z.B. an die Kundennummer zu kommen?

Du musst deiner AccountPaymentMethodPageLoadedEvent_subscriber class ein __construct hinzufügen und als Wert wird dort dein argument, sprich das Customer Entity übergeben.

 /* @var CustomerEntity */
protected $customerEntity;

function __construct(CustomerEntity $customerEntity)
{
    $this->customerEntity = $customerEntity;
}

in onPageLoaded kannst du dann per

$this->customerEntity

darauf zugreifen und dann über criteria etc. gewünschte Werte abfragen.

Grundsätzlich stellt sich die Frage, ob du die Daten nicht auch schon aus dem $event bekommst. Müsstest im Frontend im dev-Modus einfach mal schauen, ob der Wert nicht schon im event gespeichert ist.