2009-12-09 18 views
5

Moja sytuacja:Jak przekierować CakePHP do innej akcji/kontrolera?

Użytkownik otrzymuje tabelę lub listę przedmiotów. Obok każdego przedmiotu mogą kliknąć pole wyboru, aby je zaznaczyć, a następnie na dole znajduje się pole wyboru z napisem "Za pomocą wybranych elementów ..." i takie rzeczy jak "usuń", "przenieś do projektu", "pobierz" itp. Znasz transakcję - operacje masowe. Niektóre operacje zostaną wykonane natychmiast i nie będą wymagać osobnego widoku, jednak inne będą wymagać widoku pośredniego (np. "Przenieś je do którego projektu?").

Ponieważ każda z indywidualnych operacji jest obsługiwana przez inną akcję (i ewentualnie inny kontroler), ale formularze mogą być wysyłane tylko pod jeden adres, potrzebuję działania, które przeniesie przesłane dane i wyśle ​​je w odpowiednie miejsce .

Używanie redirect() również nie zadziała, ponieważ w najbliższej przyszłości będzie to AJAX.

Zasadniczo Chcę tylko działanie, które będzie delegować do innego kontrolera/działania, jak gdyby to była oryginalna prośba: utrzymywanie danych post, czyniąc ten pogląd, itp

Jakieś pomysły?

Odpowiedz

9

Udało mi się to ustalić za pomocą Dispatchera.

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

Jeśli podążysz za wzorcem MVC, nie będziesz miał z tym problemu, ponieważ logika biznesowa powinna znajdować się w modelach, a nie w akcjach kontrolera.

W każdym razie możesz utworzyć akcję "zbiorczą", która wywoła wszystkie inne osoby szukające niektórych danych do pracy.

+0

tak - jak to zrobić? Jak wywołać inną akcję na innym kontrolerze? – nickf

+0

"Zadzwoń", za powiedzenie, nie jest bardzo zalecane. Ale możesz utworzyć żądane kontrolery wewnątrz pierwszego. Mimo to najlepszą opcją jest sprawdzenie, czy modele działają, i na przykład pojedyncza akcja kontrolera bulk(). Sprawy będą znacznie łatwiejsze do opanowania, gdy przeniesiesz się do ajaxa – yoda

Powiązane problemy