19

の違いを知りたい:

$this->forward("module", "action");

$this->redirect("module/action");

私の最初の推測では、一方は新しいリクエストを意味し、もう一方はそうではないということですが、よくわかりません。

4

1 に答える 1

40

場合によっては、アクションの実行は、新しいアクションの実行を要求することによって終了します。たとえば、POSTリクエストでフォーム送信を処理するアクションは、通常、データベースの更新後に別のアクションにリダイレクトします。もう 1 つの例は、アクション エイリアスです。index アクションは多くの場合、リストを表示する方法であり、実際にはリスト アクションに転送されます。

アクション クラスは、別のアクションを実行するための 2 つのメソッドを提供します。

アクションが呼び出しを別のアクションに転送する場合:

$this->forward('otherModule', 'index');

アクションの結果として Web リダイレクトが発生する場合:

$this->redirect('otherModule/index');
$this->redirect('http://www.google.com/');

リダイレクトか転送かの選択が難しい場合があります。最適なソリューションを選択するには、転送はアプリケーションの内部にあり、ユーザーには透過的であることに注意してください。ユーザーに関する限り、表示される URL は要求されたものと同じです。対照的に、リダイレクトはユーザーのブラウザーへのメッセージであり、ブラウザーからの新しい要求と、最終的な結果の URL の変更を伴います。

を使用して送信されたフォームからアクションが呼び出される場合は、method="post"常にリダイレクトを行う必要があります。主な利点は、ユーザーが結果のページを更新した場合、フォームが再度送信されないことです。POSTさらに、戻るボタンはフォームを表示することで期待どおりに機能し、リクエストを再送信するかどうかをユーザーに尋ねるアラートは表示しません。

于 2009-05-29T15:29:00.273 に答える