4

ZF を使用して Web アプリを開発しているときに、ハハがありました。Zend_Controller_Action の _forward メソッドに関する瞬間。Programmer's Reference Guideに記載されているように、アクション内で _forward メソッドを呼び出すと、要求されたアクションは現在のアクションが完了するまで実行されません。これは疑問を投げかけます:

_forward アクションを使用して、現在のアクションが別のアクションを開始する前に完了することを意図的に確認するのはいつですか? これの明確な例は何ですか? このアプローチを ActionStack に当てはめて使用することの落とし穴や利点はありますか?

4

3 に答える 3

4

_forward()Requestオブジェクトのモジュール/コントローラー/アクションパラメーターを置き換えるだけです。

外出先で気が変わるだけです(別のリクエストなしで)。

これは、呼び出されたディスパッチ ループの状態に応じて、異なる結果をもたらします。setDispatched()実行には時間がかかります。

次のシナリオを検討してください。

初め:

$this->_forward('some')

2番:

return $this->_forward('some');

三番:

$this->someAction();
// ececuted?

第4:

return $this->someAction();
// executed?
于 2010-11-17T19:19:31.440 に答える
1

私が実際に使用_forwardする理由は 2 つだけです。

  1. リダイレクトしたいが、ユーザーの URL を変更したくない。

  2. いくつかの (非文字列) オブジェクトを別のアクションに渡したいです。

    $this->_forward('index', null, null, array('create_task_form' => $form));

いずれの場合も、ターゲット アクションはオリジネーターなしで自立でき、通常はディスプレイをマーシャリングするだけです。

于 2010-11-17T22:40:56.510 に答える
0

_forward アクションを使用して、別のアクションを開始する前に現在のアクションを意図的に完了させるのはいつですか?

が使用される前に現在のアクションを完了させるために使用されているとは思いません_forward()。これは、アクションの目的であるリクエストを処理するというよりも、ドメイン ロジック (モデル、サービスなど) への呼び出しのように見えます。

yourAction
  if(conditionsAreNotMet()) {
     return _forward(anotherAction);
  }

アクションに早期の出口点を_forward()設けるために提供されていると思います(このロジックは、ニュースの提示など、すべて 1 つのことに焦点を当てています)。別のリクエスト( など)を実行する必要がないため、Web サーバーにさらに負荷がかかります。_redirect()

于 2010-11-17T15:57:26.990 に答える