Hey ich habe gerade auf meiner Demo-Seite die URL vom SalesChannel gewechselt und mir ist aufgefallen, dass meine Plugin-Controller alle auf die Root-URL zugreifen wollen.
Bekomme ach dazu eine entsprechende Fehlermeldung:
Fatal error: Uncaught Shopware\Storefront\Framework\Routing\Exception\SalesChannelMappingException: Unable to find a matching sales channel for the request: https://domain.de/sign-in". Please make sure the domain mapping is correct. in /.../vendor/shopware/storefront/Framework/Routing/RequestTransformer.php:60 Stack trace:
#0 /.../public/index.php(71): Shopware\Storefront\Framework\Routing\RequestTransformer->transform(Object(Symfony\Component\HttpFoundation\Request))
#1 {main} thrown in /..../vendor/shopware/storefront/Framework/Routing/RequestTransformer.php on line 60
In meinem Fall geht es um die URL die durch den namen (der im Controller definiert wurde) in Twig erstellt wird…
twig
...
controller methode
/**
* @Route("/sign-in", name="moorl.sign-in", methods={"POST"})
*/
public function getAuthorizationUrl(Request $request, SalesChannelContext $context): Response
{
...
}
MIt der API hab ich es noch nicht probiert! Aber die Formular-Controller aus dem Core folgen dem selben Prinzip und dort gibt es keinen Routung-Fehler.
du musst das Routing für deine Controller erst registrieren. Dann sollte es auch mit jeder beliebigen Route klappen.
Auch wenn wir natürlich davon abraten ungesicherte Routen ins System zu bringen.
Wie du dein Routing registrierst kannst du hier finden.
du musst das Routing für deine Controller erst registrieren. Dann sollte es auch mit jeder beliebigen Route klappen.
Auch wenn wir natürlich davon abraten ungesicherte Routen ins System zu bringen.
Wie du dein Routing registrierst kannst du hier finden.
Grüße Sebastian
Hallo Sebastian,
was meinst du mit ungesicherten Routen im System? Ich sehe gerade keine Alternativen dazu. Gibt es einen Shopware Controller, der generell alle Form-Submits abfängt und als Event bereit stellt? Habe ich auch als Public-User auf dem Storefront eine Authentifizierung?
Die Doc habe ich befolgt, die Routes funktionieren auch, nur nicht wenn ich die Root-Url des SalesChannels wechsle.
Das Problem ist aber aktuell nur auf der EA1.1, ich hab gesehen, dass sich da was getan hat (RouteScopes etc)… Werde das mal im Blick behalten
Ich habe nun das Problem, dass ich bei Mehrsprachigen Formularen unter verschiedenen SalesChannelDomains mit der Twig Funktion “path” weiterhin nicht die richtige Controller URL bekomme, deshalb is die LanguageId aus dem Context falsch.
@EikeBrandtWarneke Die Urls im Core, die durch path generiert werden sind auch allesamt relativ - trotzdem wird der Part der aktiven SalesChannelDomain dort mit beachtet
@AlexGalax Danke für den entscheidenen Hinweis, url() geht nicht -> aber seoUrl() liefert ein brauchbares Ergebnis. Damit ist mir fürs Erste geholfen.
Trotzdem sollte es doch trotzdem auch mit path() funktionieren
Das Thema wird seitens Shopware gekonnt ignoriert. Auch in Shopware 6.4 hat sich nichts geändert - aber von den Plugin Entwicklern scheine ich der Einzige zu sein, der darauf hinweist? Es ist nun ein weiteres Routing-Problem dazu gekommen. Geht hierbei nun um redirects, die von einem Controller ausgehen:
Ich stoße halt immer wieder auf diese Probleme, hauptsächlich weil die Qualitätskontrolle für die Shopware Plugins mich immer wieder darauf hinweist und meine Plugins es deshalb nicht in den Store schaffen! ggwp Shopware
Sehr späte Antwort, aber ich hatte erst heute das gleiche „Problem“ und habe mal nach der Lösung gesucht.
Daher, für alle, die zufällig das selbe Problem haben und auf diesen Thread stoßen, hier die Lösung:
Damit das mit der URL passt (bspw. das „/de“ berücksichtigt wird), muss der technische Routen-Name mit frontend, widgets oder payment starten.
Also, bei dem Beispiel oben: {{ path('frontend.moorl-form-builder.fire', {'formId': form.id}) }} und dann läuft’s.
Der Name muss natürlich auch im Controller in der Route angepasst werden, nicht nur im Template im Aufruf.