ZF2: Wie Parameter übergeben forward-plugin, das ich kann dann in der Methode leite ich Sie an?
Habe ich eine Action-Methode in Foo Controller Parameter erfordern:
public function fooAction($one, $two) {
$a = one;
$b = $two;
}
Und ich brauche, um nach vorn zu, dass die Methode von einer anderen Methode einige Boo Controller. Und diese Parameter werden by reference parameter. Das einzige Beispiel, dass das Handbuch hat, ist dies:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));
Keine zusätzlichen Parameter. Aber Sie schreiben:
$params ist ein optionales array von Parametern, mit denen, um zu sehen, eine
RouteMatch Objekt für die Zwecke dieses spezifische Anfrage.
So, ich habe versucht:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'one' => &$one,
'two' => $two,
));
Aber es funktioniert nicht.
Gibt es eine Möglichkeit zur übergabe weiterer Parameter für vorwärts-controller?
UPD:
Diese arbeiten nicht zu:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'params' => array(
'one' => &$one,
'two' => $two,
)));
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'options' => array(
'one' => &$one,
'two' => $two,
)));
UPD 2:
Ich kann immer noch nicht die Funktionalität, die ich will (zum übergeben von Parametern mit der forward
plugin), aber ich fand andere Lösungen. Vor dem Aufruf der forward
plugin, das ich die Variablen die Request
Objekt und nach der forward
ich Sie aus der Request
in meinem boo Aktion meines Boo\Controller\BooController:
//in Foo::fooAction
$this->getRequest()->one = &$one;
$this->getRequest()->two = $two;
$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));
//in Boo::booAction
$a = $this->getRequest()->one;
$b = $this->getRequest()->two;
Blöde Lösung, wird es nicht funktionieren mit Ajax-Anfragen. Weiterhin interessiert, wie die übergabe von Parametern mit der vorwärts-plugin. ODER VIELLEICHT, wie man Sie in der booAction. Weil es in nichts in der Request
wenn ich den pass mit der forward
.
UPD 3 und Finale:
Ich endlich gefunden, wo Sie sich entschieden haben, zu verbergen habe ich Parameter übergeben, mit der forward
plugin. Sie steckte Sie in die RouteMatch
Objekt.
- Tryyyy zu erraten, wo wir uns verborgen haben Ihr params... Oh yeeah, sind Sie in der RouteMatch
natürlich sind Sie da, nicht Sie denken, dass etwas anderes?
Und KEINE info in der forward
plugin Abschnitt des Handbuchs!
To get params, ich habe dazu in meinem BooController::booAction
:
$param = $this->getEvent()->getRouteMatch()->getParam('nameOfParam');
- ist
Boo
einen gültigen Controller-Alias? Wie bereits von der DokumentationBoo
muss entweder ein voll Qualifizierter Klassenname (z.B.Mymodule\Controller\BooController
) oder sollte es ein alias für diese controller, die Sie definieren innerhalb Ihrer Konfiguration - Ja, es ist ein voll Qualifizierter Klassenname, es ist
'Boo\Controller\Boo'
ich habe. Ich schrieb, wie dies in der Frage um es kürzer zu machen. Wechseln Sie jetzt zu vermeiden Dunkelheit. - Dies ist immer noch nur ein alias. Es ist sicher davon ausgehen, dass Sie eingerichtet haben, ein invokables alias von
Boo\Controller\Boo
=>Boo\Controller\BooController
? Außer das dein Erster Ansatz der richtige ist. Wie testen Sie, ob der Parameter vorhanden sind? Sie sind definiert in der route-Konfiguration zu? Tihs Beitrag verwendet die Funktionalität, die Sie suchen viel: michaelgallego.fr/blog/2012/10/06/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erstellen Sie eine container-Klasse und verwenden Sie es in beide Controller
im Modul.conf
Erstellen Sie eine get-Methode, die in beiden Controllern:
Und rufen Sie es mit:
ZF2 Weg zum pass vars mit Hilfe der vorwärts -
In der passing-Methode tun:
In der controller-Methode aufgerufen, zu tun:
Warum nicht verwenden die params-plugin?
Diese funktioniert bei mir:
Dachte, ich möchte hinzufügen, eine weitere option, die für mich funktioniert.
Können Sie übergeben Sie einfach die params-gerade durch die vorwärts-Funktion und verwenden Sie die routeMatch-Funktion, um Ihnen den Zugang am anderen Ende.
Geht Foo Controller, basAction in dieser Methode können Sie dann verwenden Sie den folgenden code, um den Zugriff auf die id, param
Nicht sicher, ob dies Ihren Anforderungen entspricht - aber für mich funktioniert.
Danke für die Frage, hat mir sehr geholfen. Einen einfachen Weg gefunden, für alle params übergeben forward()->dispatch(...). In der controller-action-Methode:
Rückgabe array $data übergeben als $Daten in vorwärts - ()->dispatch($controllerName, $Daten).
Hier in der offiziellen ZF2 Dokumentation geschrieben genau, wie es funktioniert:
$params
ist ein optionales array von Parametern, mit denen die Samen ein RouteMatch Objekt für die Zwecke dieses spezifische Anfrage. Bedeutung der Parameter angepasst werden, indem Sie Ihre Schlüssel, um die routing-IDS in der config (sonst nicht passenden Schlüssel werden ignoriert).So passieren wie diese:
Dann können Sie sich Ihre route match params in Ihrem
My\Controller
wie normalerweise:Für Menschen kämpfen mit Zugriff auf Parameter, innerhalb deren controller hier eine nette übersicht von dieses CheatSheet.