2009-12-09 11 views
5

La mia situazione:Come rendere CakePHP reindirizzare a un'azione/controller diversi?

utente è presentato con una tabella o un elenco di elementi. Accanto a ogni elemento possono fare clic su una casella di controllo per selezionarlo, quindi in fondo c'è una casella di selezione che dice "Con elementi selezionati ...", e cose come "cancella", "sposta su progetto", "scarica", ecc. Conosci l'affare - operazioni di massa. Alcune delle operazioni verranno eseguite immediatamente e non richiedono la loro vista, tuttavia altre avranno bisogno di una vista intermedia (es .: "Sposta questi in quale progetto?").

Poiché ciascuna delle singole operazioni viene gestita da un'azione diversa (e un controller diverso, eventualmente), ma i moduli possono solo postare un indirizzo, ho bisogno di un'azione che prenderà i dati inviati e li invierà nel posto appropriato .

L'utilizzo di redirect() non funzionerà neanche, poiché questo dovrà essere AJAX nel prossimo futuro.

Fondamentalmente voglio solo un'azione che delegherà a un diverso controllo/azione come se fosse la richiesta originale: il mantenimento di dati post, rendendo questo punto di vista, ecc

Tutte le idee?

risposta

9

Sono stato in grado di capirlo usando il Dispatcher.

// 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

Se segui lo schema di progettazione MVC, non avrai problemi con questo, poiché la logica di business dovrebbe essere nei Modelli, non nelle azioni del Controller.

In ogni caso, è possibile creare un'azione "di massa" che chiamerà tutti gli altri alla ricerca di alcuni dati con cui lavorare.

+0

sì - come posso fare questo? Come posso chiamare un'azione diversa su un controller diverso? – nickf

+0

"call", per dire, non è molto raccomandato. Ma puoi istanziare i controller desiderati all'interno del primo. Tuttavia, l'opzione migliore è fare in modo che i modelli facciano quel lavoro e, per esempio, abbiano un singolo bulk action(). Le cose saranno molto più facili da gestire quando porti a Ajax, btw – yoda

Problemi correlati