Problem mit SalesChannelContext nach Update auf 6.1

Guten Tag,
 

ich habe aktuell folgendes Problem, 

beim Versuch einen Bestellung zu bestätigen tauchte folgende Fehlermeldung auf:

„Argument 10 passed to Shopware\SalesChannel\Context\SalesChannelContextFactory::__construct() must be an instance of Doctrine\DBAL\Connection, null given,…“,
nach einigem Rumprobieren ist dieser Fehler zu einem neuen Fehler geworden.

„Call to a member function getContext() on null“

Das wäre die ‚Chronik‘ der Änderungen.

//create new factory (originally)
/*$factory = new SalesChannelContextFactory(
     $container->get('sales_channel.repository'),
     $container->get('currency.repository'),
     $container->get('customer.repository'),
     $container->get('customer_group.repository'),
     $container->get('country.repository'),
     $container->get('tax.repository'),
     $container->get('customer_address.repository'),
     $container->get('payment_method.repository'),
     $container->get('shipping_method.repository'),
     $connection, (global $connection)
     $container->get('country_state.repository'),
     new TaxDetector()
);*/
//create new factory (first change)
/*$factory = new SalesChannelContextFactory(
     $container->get('sales_channel.repository'),
     $container->get('currency.repository'),
     $container->get('customer.repository'),
     $container->get('customer_group.repository'),
     $container->get('country.repository'),
     $container->get('tax.repository'),
     $container->get('customer_address.repository'),
     $container->get('payment_method.repository'),
     $container->get('shipping_method.repository'),
     $container->get('dbal_connection'),
     $container->get('country_state.repository'),
     new TaxDetector()
);*/
//second change
$factory= $container->get(SalesChannelContextFactory::class);

und hier entsteht der aktuell Fehler:

$prices = $shippingPriceRepository->search($criteria, $salesChannelContext->getContext())->getEntities();

 

Befindest du dich da in einem eigenen Plugin?

Spricht was dagegen einfach SalesChannelContextFactory zu injecten und nicht selber zu erzeugen?

Dann bist du vermutlich auch unabhängig davon, falls sich die Signatur mal ändert?

1 Like

@claudio schrieb:

Befindest du dich da in einem eigenen Plugin?

Spricht was dagegen einfach SalesChannelContextFactory zu injecten und nicht selber zu erzeugen?

Dann bist du vermutlich auch unabhängig davon, falls sich die Signatur mal ändert?

Erstmal danke für den Tipp.

  1. Technisch gesehen befinde ich mich in einem eigenem Plugin, auch wenn es nicht von mir geschrieben wurde.
    ​2. Es spricht nichts dagegen und es scheint auch entsprechend zu funtionieren. Nur ist jetzt das Problem, dass  beim Erstellen des SalesChannel Contextes die übergebene SalesChannel Id NULL anstatt einem String übergibt.

So werden die benötigten Parameter geholt

$salesChannelId = $request->get('sw-sales-channel-id');
$contextTokenId = $container->get('session')->get('sw-context-token');

Die TokenID scheint zu klappen, aber die ChannelID nicht. Auch der Versuch die Vorgehensweise der TokenID zu kopieren hat nicht geklappt. 

Ist die Art wie die Channel Id abgefragt wird komplett falsch oder was könnte hier der Fehler sein?
Ich bin leider mit Shopware noch unerfahren, falls die Frage Dumm erscheint.

Mir fehlt ein wenig der Kontext (pun intended ;)). Bist du in einem Controller, Service, Event? Was genau ist dein Ziel?

An anderer Stelle habe ich folgendes gefunden. Vielleicht funktioniert das (abgewandelt):

$contextToken = $event->getRequest()->headers->get(PlatformRequest::HEADER_CONTEXT_TOKEN);
$salesChannelId = $event->getRequest()->attributes->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_ID);

Das mit dem Context habe ich selber noch nicht so ganz verstanden. Aber vielleicht geht auch einfach das?

$shippingPriceRepository->search($criteria, \Shopware\Core\Framework\Context::createDefaultContext());