2009-12-09 15 views
5

Meine Situation:Wie kann CakePHP auf eine andere Aktion/Controller umgeleitet werden?

Dem Benutzer wird eine Tabelle oder eine Liste von Elementen angezeigt. Neben jedem Element können sie auf ein Kontrollkästchen klicken, um es auszuwählen, und dann unten ist ein Auswahlfeld, das sagt "Mit ausgewählten Elementen ...", und Dinge wie "Löschen", "zum Projekt bewegen", "Download", etc Sie kennen den Deal - Bulk-Operationen. Einige der Operationen werden sofort ausgeführt und benötigen keine eigene Ansicht, andere benötigen jedoch eine Zwischenansicht (z. B .: "Diese zu einem Projekt verschieben?").

Da jede der einzelnen Operationen von einer anderen Aktion (und anderen Controller, möglicherweise) behandelt wird, aber Formulare nur an eine Adresse senden können, brauche ich eine Aktion, die die gebuchten Daten übernimmt und an den entsprechenden Ort sendet .

Die Verwendung von redirect() wird auch nicht funktionieren, da dies in naher Zukunft AJAX'd sein muss.

Grundsätzlich mag ich nur eine Aktion, die mit einer anderen Controller/Aktion delegiert wird, als ob das die ursprüngliche Anforderung war: Post-Daten beibehalten wird, diese Ansicht Rendering usw.

Irgendwelche Ideen?

Antwort

9

Ich konnte es mit dem Dispatcher herausfinden.

// for example, to reroute to users/delete 

// this is in the controller which receives the request. 
// this could even be in the AppController 

$this->autoRender = false; 
$d = new Dispatcher(); 
$d->dispatch(
    array("controller" => "users", "action" => "delete"), 
    array("data" => $this->data) 
); 
-1

Wenn Sie dem MVC-Entwurfsmuster folgen, haben Sie damit kein Problem, da die Geschäftslogik in den Modellen und nicht in den Controller-Aktionen enthalten sein sollte.

Wie auch immer, Sie können eine "Bulk" -Aktion erstellen, die alle anderen anruft, die nach Daten suchen, mit denen sie arbeiten können.

+0

yep - wie mache ich das? Wie rufe ich eine andere Aktion auf einem anderen Controller auf? – nickf

+0

"Anruf", per sagt, ist nicht sehr zu empfehlen. Aber Sie können die gewünschten Controller in der ersten instanziieren. Dennoch ist es die beste Option, wenn Models dies tun und zum Beispiel eine einzige Controller-Aktion bulk() haben. Die Dinge werden viel einfacher zu handhaben sein, wenn Sie auf Ajax, BTW portieren – yoda

Verwandte Themen