Ich habe eine Aktionsmethode in Foo Controller, die Parameter benötigt:
%Vor%Und ich muss diese Methode von der anderen Methode eines Boo Controllers weiterleiten. Und einer dieser Parameter muss nach Referenzparameter sein. Das einzige Beispiel, das das Handbuch hat, ist dies:
%Vor%Keine zusätzlichen Parameter. Aber sie schreiben:
$ params ist ein optionales Array von Parametern, mit denen man a sehen kann RouteMatch-Objekt für die Zwecke dieser spezifischen Anfrage.
Also, ich habe es versucht:
%Vor%Aber es funktioniert nicht.
Gibt es eine Möglichkeit, zusätzliche Parameter an den Controller weiterzuleiten?
UPD:
Diese funktionieren auch nicht:
%Vor%UPD 2:
Ich kann immer noch nicht die gewünschte Funktionalität bekommen (um Parameter mit dem forward
Plugin zu übergeben), aber ich habe andere Lösungen gefunden. Bevor ich das forward
Plugin anrufe, setze ich die Variablen auf das Request
Objekt und nach dem forward
bekomme ich sie von der Request
in meiner boo Aktion meines Boo \ Controllers \ BooController :
Dumme Lösung, es wird nicht mit Ajax-Anfragen funktionieren. Immer noch interessiert, wie Parameter mit dem Forward-Plugin übergeben werden. ODER VIELLEICHT, wie man sie in booAction bekommt. Da gibt es in der Request
gar nichts, wenn ich sie mit dem forward
übergebe.
UPD 3 und Finale:
Ich habe endlich gefunden, wo sie entschieden haben, Parameter zu verstecken, die ich mit dem forward
-Plugin übergebe. Sie legen sie in das Objekt RouteMatch
.
- Versuchen Sie zu raten, wo wir Ihre Params versteckt haben ... Oh yeeah, sie sind in der RouteMatch
, natürlich sind sie da, haben Sie nicht anders gedacht?
Und keine Informationen im forward
Plugin-Abschnitt des Handbuchs!
Um Params zu bekommen, muss ich das in meinem BooController::booAction
:
Sie können eine Container-Klasse erstellen und sie in beiden Controllern verwenden
in der module.conf
%Vor%Erzeuge einen Getter in beiden Controllern:
%Vor%Und rufe es mit:
%Vor%Bei der Übergabemethode:
%Vor%In der aufgerufenen Controller-Methode:
%Vor%Ich dachte, ich würde eine andere Option hinzufügen, die für mich funktioniert.
Sie können die Parameter einfach direkt durch die Funktion forward übergeben und mit der Funktion routeMatch auf das andere Ende zugreifen.
%Vor%Übergibt an Foo Controller, basAction Bei dieser Methode können Sie dann den folgenden Code verwenden, um auf den ID-Parameter
zuzugreifen %Vor%Nicht sicher, ob dies Ihren Anforderungen entspricht - aber funktioniert für mich.
Danke für die Frage, hat mir sehr geholfen. Gefunden einen einfachen Weg, um alle Params weitergeleitet zu bekommen () - & gt; Versand (...). In der Aktionsmethode des Controllers:
%Vor%gibt das Array $ data als übergebenes $ data in forward () - & gt; dispatch ($ controllerName, $ data) zurück.
Hier in der offiziellen ZF2-Dokumentation genau geschrieben wie es funktioniert:
$params
ist ein optionales Array von Parametern, mit denen ein RouteMatch-Objekt für die Zwecke dieser spezifischen Anfrage erstellt wird. Das bedeutet, dass die Parameter mit ihrem Schlüssel zu den Routing-IDs in der Konfiguration übereinstimmen (andernfalls werden nicht übereinstimmende Schlüssel ignoriert) .
Also pass so:
%Vor% Und dann kannst du deine route match params in deinem My\Controller
normal bekommen:
Für Leute, die mit dem Zugriff auf Parameter in ihrem Controller zu kämpfen haben, hier eine schöne Übersicht von diesem CheatSheet .
%Vor%Tags und Links php zend-framework2 zend-framework-mvc zend-framework-routing