\Shopware\Core\Framework\Context::createDefaultContext() als @internal markiert

Moin Zusammen,

createDefaultContext() ist als @internal markiert, wird aber in der Doku für Beispiele genutzt (z.B.: Creating entities via DAL, Shopware 6: Creating entities via DAL)

Meine Frage ist, wie der @internal Tag von Showpare genutzt wird:

  1. Nur zur Markierung, dass evtl. dahinter stehender Text bei der Doc-Erstellung ignoriert werden soll.
  2. Die Methode gehört nicht zur öffentlichen API - Nutzung daher auf eigene Gefahr :wink:
  3. Oder ist das eine (falsche?) automatische Markierung von Symfony/Composer?

Und wenn 2), warum wird es dann in der Doku genutzt? Oder habe ich grade ein Brett vor dem Kopf?

Besten Dank,
devnulroot

Moin,

Die Frage wurde so ähnlich schon auf GitHub gestellt.

Context::createDefaultContext() sollte in Produktivcode nicht verwenden werden (müssen), da in den meisten Einstiegspunketen für Plugin-Entwickler (eigene Controller, Eventsubscriber, …) überall ein Context verfügbar sein sollte und dieser dann eher im eigenen Code runter gereicht werden sollten.

Das liegt daran das einige Features des DataAbstractionLayers über den Context gesteuert werden (zum Beispiel das automatische Translation handling, laden von preisen in der richtigen Currency, etc.). All das hängt ab von den Werten die im Context definiert sind, wenn du immer einen neuen Context über createDefaultContext() erzeugst bekommst da zum Beispiel die Translations immer in der Standardsprache geladen, anstatt in der Sprache die der Customer sehen möchte.

In den Docs wird die Methode nur zur Veranschaulichung verwendet, da die Code-Snippets so eigenständig lauffähig sind, aber normalerweise sollte der Context immer heruntergereicht werden.

Viele Grüße
Jonas

2 Likes

Moin JonasElfering,

und vielen, lieben Dank für die ausführliche Erläuterung - auch wenn ich Depp die GitHub Frage nicht gefunden hatte, sorry Blush

Ich hatte tatsächlich bereits den übergebenen $installContext in einem Plugin genutzt - aber idiotischerweise vergessen ->getContext() aufzurufen, so ging es natürlich nicht. Error nicht richtig interpretiert und in Eile die „Fallbacklösung“ Context::createDefaultContext() genommen. Was PHPStorm dann ja zu Recht angemäkelt hat :wink:

Viele Grüße,
devnullroot

1 Like

Moin,

wie kommt man eigentlich an einen Context in einem ScheduledTask? Konnte da nichts finden?

MfG

 

3 Likes