2009-12-09 61 views
5

我的情況:如何使CakePHP重定向到不同的動作/控制器?

向用戶呈現一個表或項目列表。在每個項目旁邊,他們可以點擊一個複選框來選擇它,然後在底部是一個選擇框,其中顯示「With selected items ...」,以及諸如「刪除」,「移動到項目」,「下載」等內容你知道這筆交易 - 批量經營。一些操作會立即執行,不需要自己的視圖,但其他操作需要中間視圖(例如:「將這些移動到哪個項目?」)。由於每個單獨的操作都由不同的操作(可能有不同的控制器)處理,但表單只能發佈到一個地址,所以我需要一個操作,它將發佈的數據發送到適當的地方。

使用redirect()也不起作用,因爲這將需要在不久的將來被AJAX'd。

基本上我只想一個行動,這將委託給不同的控制器/動作好像這就是原始請求:維護後的數據,渲染視圖等

任何想法?

回答

9

我能夠使用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

如果您遵循MVC設計模式,那麼您就不會遇到任何問題,因爲業務邏輯應位於模型中,而不是控制器操作。

無論如何,您可以創建一個「批量」操作,它將調用所有其他人員搜索某些要處理的數據。

+0

是的 - 我該怎麼做?我如何在不同的控制器上調用不同的操作? – nickf 2009-12-09 04:52:29

+0

「呼籲」,說,不是很推薦。但是您可以在第一個控制器中實例化所需的控制器。儘管如此,最好的選擇是讓Model完成這項工作,並且擁有單個控制器action bulk()。事情將會更容易處理,當你移植到ajax時,順便說一句 – yoda 2009-12-09 05:10:37

相關問題