Hey zusammen,
ich habe eine Kategorieseite zu meinem Shop hinzugefügt, auf dem eine Form ausgefüllt werden kann. Wenn man diese submittet, wird ein Controller gefeuert, den ich geschrieben habe, und je nachdem wie dort die Daten verarbeitet werden, soll die Seite mit anderen Parametern neu geladen werden.
z.B. soll ein Kunde eine Produktnummer angeben, „start“ drücken, dann holt der Controller den Namen und ein Bild aus der Datenbank, und dann möchte ich die Kategorieseite mit dem gefundenen Produkt statt der Form anzeigen.
Die RenderStorefront-Funktion braucht ja ein twig als parameter, und da wüsste ich nicht, welches ich nehmen soll.
Daher arbeite ich bisher mit der ForwardToRoute-Funktion, aber mit der kann man anscheinend keine Variablen übergeben.
Vielen Dank schonmal für eure Hilfe
David
Edit: Also ich hab ein Plugin installiert, mit welchem ich in Erlebniswelten Twig-Code schreiben kann, und eine extra Erblebniswelt für meine Kategorieseite angelegt.
Da möchte ich dann sowas wie
{% if productFound %} (und im controller steht dann sowas wie forwardtoRoute(Route, [‚productFound‘ => $product], [‚id‘ => naviID])
blabla hier produkt
{% else %}
Zeig die Anfrage form
{% endif %}
Shopware verwendet unter anderem Symfony zusammen mit Twig.
Entsprechend wirst du in der symfony-Dokumentation fündig:
https://symfony.com/doc/current/reference/twig_reference.html
Finde den Namen über die Annoations an der passenden Controller-Funktion:
/**
* @Route("/endpoint/action/{id}", name="frontend_endpoint_myaction")
*/
public function myControllerFunction(...) { ... }
Dann im Moorl-Twig (Das wird es wohl sein) für den dynamischen Pfad:
{{ path('frontend_endpoint_myaction', { id: 10 }) }}
Hey chapter2. Vielen Dank für deine Antwort.
Ich weiß nicht, ob ich deinen Vorschlag vielleicht einfach falsch verstehe, aber meine Frage ist nicht, wie ich von Twig aus meinen Controller feuern kann, sondern wie ich von meinem Controller aus eine Response geben kann, welche dem Twig Variablen mit Daten mitgibt.
Mit der RenderStoreFront-Funktion von Storefront-Controllern hat man die Möglichkeit ein Array mit Variablen mitzugeben, auf welche man im Twig dann direkten Zugriff hat. Da schreibt man dann in dem Controller
return $this->renderStorefront('path zum Twig, dass man rendern will', [array mit Variablen, auf die man im Twig zugriff haben will]);
Mein Problem ist nur, dass ich nicht nur ein einzelnes Twig rendern will, sondern die gesamte Seite.
Deswegen benutze ich im Moment noch die ForwardToRoute-Funktion. Mit der kann ich wie gewünscht wieder auf die Kategorieseite leiten, aber habe nicht die Möglichkeit Variablen mitzugeben.
Edit:
Oder gibt es vll. ein Twig, welches gerade für jede Shopseite verwendet wird, wo dann Header Body und Footer geladen werden? Und das könnte ich der RenderStoreFront-Funktion übergeben, mit der ID von der Kategorie oder so?
@Monotanic, meines Erachtens kannst du einem Forward Parameter mitgeben:
$this->forwardToRoute('name.der.route', ['productFound' => $product, 'id' => $naviID])
Hast du mal im Template ein {{dump()}}
hinzugefügt und überprüft, ob die Parameter vorhanden sind? Eventuell greifst du auf die Parameter falsch zu, da Sie in ein ParameterBag umgewandelt werden.
Guck mal im app.request.attributes
nach, ob deine Parameter dort vorhanden sind.
vg
Hey @abdullah, danke für deine Antwort.
die Vorlage für die forwardToRoute-Funktion sieht ja so aus:
protected function forwardToRoute(string $routeName, array $attributes = [], array $routeParameters = []): Response { }
Da ich eine Shopseite laden will benutze ich die so:
return $this->forwardToRoute('frontend.navigation.page', ['foundtest' => true, 'found' => 'true'], ['navigationId' => $categoryId]);
Für die Route Parameters muss ich hier die navigationId mitgeben. Wenn ich da noch irgendwelche weiteren Einträge ins Array schreibe, bekomme ich eine Fehlermeldung.
‚foundtest‘ bzw. ‚found‘ kann ich im twig beide nicht finden. Also ich habe da einen {{dump()}}
, der ja auch ne Suchfunktion hat, und beides kann ich nirgendwo finden.
Edit: Hätte einfach mal richtig tun sollen, was du mir geraten hast. Mit der Suchfunktion hab ichs nicht gefunden, weil ein allg. dump() nicht so sehr in die Tiefe geht, und nur nen oberflächlichen Requeststack gezeigt hat.
Die Variablen sind genau da, wo du sagst. Vielen vielen Dank!
1 „Gefällt mir“