AJAX Anfrage an Controller

Hallo Zusammen,

ich habe bei einigen SW 5 Plugins oft Daten via AJAX im Frontend nachgeladen und dazu den Contoller via AJAX Call angesprochen (mit Jquery). Jetzt ist ja nur noch Jquery Slim integriert, also ohne AJAX Support. Wie handhabt ihr eine AJAX Abfrage im SW6 Frontend via Plugin? Ich möchte nur per POST/GET Daten an den Controller senden und dann die Rückgabe (JSON) weiterverwenden. Macht ihr das mit XMLHttpRequest? Oder ist es anders vorgesehen?

Danke und euch allen einen guten Rutsch!

 

1 „Gefällt mir“

Shopware 6 hat einen http service integriert, da bei 6 alles api-first ist. Ist super :slight_smile:

Ich habe vor ein paar Wochen zum testen mal ein kleines Instagram Plugin programmiert, wo ich einen http Call zum Controller mache. Vielleicht hilft es dir weiter?

Einzig die Ordner Struktur zu den views usw. hat sich mittlerweile glaube ich etwas geändert.

Javascript Plugin => https://github.com/ChristopherDosin/Shopware-6-Instagram-Feed/blob/master/src/Resources/storefront/instagram-plugin/instagram-plugin.plugin.js

Controller mit API Endpunkt: https://github.com/ChristopherDosin/Shopware-6-Instagram-Feed/blob/master/src/Storefront/Controller/InstagramFeedController.php

Frohes neues Jahr und danke für die schnelle Antwort!

Ich habe mir die Dateien angesehen, auch mal den Rest vom Plugin. Wo legst du denn die Route fest? Das habe ich nicht gefunden. Im Controller ist es doch gar nicht implementiert?

 

Die Route wird im Controller definiert: https://github.com/ChristopherDosin/Shopware-6-Instagram-Feed/blob/master/src/Storefront/Controller/InstagramFeedController.php#L31-L35

Und im Service sagst du, dass diese annotations verwendet werden sollen => https://github.com/ChristopherDosin/Shopware-6-Instagram-Feed/blob/master/src/Resources/config/routes.xml

Parallel dazu kannst du dir ja mal die Symfony route docs durchlesen, da SW6 im Kern eine Symfony Applikation ist:

https://symfony.com/doc/current/routing.html

 

Vielen Dank! Ehrlich gesagt habe ich mich mit Symfony noch nicht im Detail beschäftigt. Ich hatte nicht geahnt, dass die Angabe der Route so funktioniert. Es sah für mich wie ein PHP Kommentar aus. Wieder etwas gelernt.

Und es ist richtig, dass ich bei der Sales Channel API keine Zugangsdaten brauche?

Für die Sales channel API brauchst du auch einen API Key, welcher allerdings nur lesen kann.

In meinen Fall wird der key in der init() method an den http clienten übergeben => https://github.com/ChristopherDosin/Shopware-6-Instagram-Feed/blob/master/src/Resources/storefront/instagram-plugin/instagram-plugin.plugin.js#L18

Dieser API Key welcher auch für alle anderen Abfragen im Theme verwendet wird - bspw. Artikel, CMS Blöcke, Content usw. - wird bereits im base.twig Template des Storefront Themes an das window object übergeben. Denn bei Shopware 6 läuft alles über die API, da API-first.

Hier wird der Key an das window object übergeben im Theme. dann verstehst du es vielleicht besser => https://github.com/shopware/platform/blob/fb4bc791e185512bfde8cd0ea462b0cf527cf82f/src/Storefront/Resources/views/storefront/base.html.twig#L112-L113