2009-12-09 8 views
5

私の状況:CakePHPを別のアクション/コントローラにリダイレクトする方法は?

ユーザーには、テーブルまたはアイテムのリストが表示されます。各項目の横にあるチェックボックスをクリックして選択することができます。次に、「選択した項目で...」と表示される選択ボックスと、「削除」、「プロジェクトに移動」、「ダウンロード」などの項目があります。あなたは大量の取引を知っています。操作のいくつかはすぐに実行され、独自のビューは必要ありませんが、中間ビューが必要なものもあります(たとえば、「これらをプロジェクトに移動しますか?」)。

個々の操作はそれぞれ別のアクション(およびおそらく異なるコントローラー)で処理されるが、フォームは1つのアドレスにしかポストできないため、投稿されたデータを取り込んで適切な場所にディスパッチするアクションが必要です。

redirect()を使用すると、近い将来にAJAXする必要があるため、どちらも機能しません。

など、任意のアイデアを、ポストデータを維持し、そのビューをレンダリング:

基本的に私はちょうどそれが元の要求であるかのように別のコントローラ/アクションに委譲するアクションをしたいですか?

答えて

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

+0

「呼び出し」は、あまりお勧めできません。しかし、最初のものの中に目的のコントローラをインスタンス化することができます。それでも、最良の選択肢は、モデルを動作させ、例えば単一のコントローラアクションbulk()を持つことです。あなたはajaxに移植するときには、処理がはるかに簡単になります。 – yoda