Controller - ein einfaches Rechenbeispiel

Moin @hoppler‍ !

Ich habe mir gerade eine komplett frische Installation aufgesetzt und kann das Verhalten nach Installieren deines Plugins weiterhin nicht nachstellen.
Da muss irgendetwas in deinem System defekt sein.

Du kannst mal folgende Dinge überprüfen, in diesem Fall mein Beispiel unter Benutzung von Google Chrome :

  1. Rufe bitte zunächst deinen eigenen Plugin Controller “MeinController” auf, führe nichts weiter aus!
  2. Öffne die Browser Entwickler-Konsole (F12)
  3. Öffne den “Network” Tab - wichtig: Da müsste eine Leiste sein, in der so Dinge stehen wie “All, XHR, JS, CSS, Img” - wähle dort unbedingt “All” aus
  4. Halte nun den Refresh-Button im Browser (um die Seite zu aktualisieren) gedrückt und wähle die unterste Option "Cache leeren und vollständig aktualliseren
  5. Sobald deine Seite neu aufgebaut wurde, müsste sich die Liste in dem Netzwerk-Tab auf der linken Seite füllen - wähle da bitte den Eintrag “MeinController” aus, also entsprechend deinem Controller-Namen
  6. Rechts müssten nun ein paar Daten zu dem “MeinController”-Request und zur Antwort des Servers befinden - wähle hier bitte den Tab “Cookies”
  7. Findest du unter den Cookies einen Eintrag, der in Etwa so heißt: __csrf_token-x ? Das ‘x’ kann dabei eine beliebige Zahl sein, entspricht der ID deines Shops

Wenn Nein: Das ist ein Problem. Aus irgendeinem Grund bekommst du den CSRF-Cookie nicht gesetzt. Da müsste man dann in deinem System nach dem Problem suchen, jedenfalls wäre das kein Problem deines Plugins.

Wenn Ja:
8. Drücke nun Strg + Shift + C - nun solltest du mit deiner Maus Elemente auswählen können, die dann hervorgehoben werden.
9. Bewege deine Maus rechts neben deinen “Rechnen” Button - damit solltest du einen großen Bereich, nämlich dein Formular, auswählen - CLICK
10. Du dürftest in der Entwickler-Konsole nun in dem Tab “Elements” sein und dein HTML Formular dürfte ausgewählt sein.
11. Findest du in deinem Formular ein neues Input Element? Dieses hat den Type   hidden und als Namen __csrf_token  - ist dem so? Ist das Value des Elements gefüllt?

Wenn Nein:
Aus irgendeinem Grund funktioniert das Javascript ist deinem System nicht, welches dafür zuständig ist die HTML Formulare automatisch mit einem CSRF-Token zu füllen.
Da müsste man nun auch im Detail im System nachschauen, liegt aber auch nicht an deinem Plugin.

Wenn Ja:
Puh, dann ist erstmal alles soweit richtig und gegeben.
In diesem Fall würde ich ein anderes Plugin als Ursache sehen, ist aber auch nicht sicher.

Zusammenfassend: Das hängt zu 99% nicht an deinem Plugin, sondern eher am System.
Da würden mir dann aber auch allmählich die Ideen ausgehen - auf einem sauberen neuen System läuft dein Plugin einwandfrei.

Ich hoffe du kannst mit dieser “Anleitung” etwas anfangen.
Da ich nicht weiß, wie technisch bewandt du bist, habe ich versucht sie so Einsteiger-freundlich wie nur irgendwie möglich zu schreiben. :stuck_out_tongue:

Gruß,
Patrick 

 

Hallo Patrick,

ich kenne mich schon etwas mit PHP und jQuery aus.

Ich habe jetzt mal die Entwicklerconsole geöffnet und da ist folgender Fehler:

Wie man sieht ist der CSRF-Token drin.

Ich werde jetzt auch mal ein komplett neues System aufsetzen und dann das Plugin noch einmal probieren und Dir berichten.

 

L.G.

Und noch einmal:

Ich habe nun 5.3.2 komplett neu installiert und Du hast recht: Es funktioniert.

Vieleicht hat ja irgendein Plugin gestört.

Jedenfalls bin ich froh, das es nun klappt.

Vielen lieben Dank, Patrick. Thumb-Up

Meinst Du, Du könntest mir noch verraten, wie ich es per Ajax hinbekomme?

Dann wäre ich wirklich total happy. Wink

L.G.

Moin @hoppler‍,

eine Erklärung, wie das nun mit Ajax laufen würde, sprengt den Rahmen ein bisschen.

Ich versuche dir dennoch eine kurze Erklärung zu hinterlassen:

  • Du wirst ein eigenes “jQuery Plugin” in dein Plugin einbauen müssen
  • In diesem jQuery Plugin legst du einen Event-Listener auf deinen “Berechnen” Button
  • Sobald der Button geklickt wird, feuerst du per Javascript einen jQuery AJAX Call
  • Der AJAX-Call geht natürlich an deine Add-Action und beinhaltet die Daten der zwei Input Felder
  • Deine addAction gibt einen JSON-enkodierten String zurück
  • Dein Javascript verarbeitet die Response, also den JSON enkodierten String und zeigt das Ergebnis an

Tut mir Leid, ich kann da leider nicht viel konkreter werden - am Besten arbeitest du dich da Step by Step vor.

Gruß,
Patrick  Shopware

Hallo Patrick,

vielen Dank, die Erklärung reicht vollkommen!

Ein schönes Wochenende wünsche ich Dir!.

L.G.