7

よくある問題は、データを別のページに転送 (投稿) しようとすることだと思います。通常、ページ間でデータを渡すにはセッションを使用しますが、Zend のこのフォワード ヘルパーには可能性があるようです。転送要求に関する情報を取得する方法はありますか? フォワーダーを要求するのと同じように (フォワーダーがない場合、通常は null を返します)?

現在の実装がない場合、それは可能ですか? それは楽しいプロジェクトであり、とにかく私が永遠に望んでいたものです. (より良い解決策が見つかるまで、私は現在、独自の BcryptDbTableAuth クラスも使用しています)。

ところで、リクエスト パラメータの追加について話しているわけではありません。ユーザーには見えないようにする必要があります。そして、私はまだ変数ルートを調査しています(ワイルドカードはトリックを行うはずですが、「ルートが一致しません」というメッセージが表示され続けます...もう少し掘り下げます)

4

1 に答える 1

19

「転送」には 2 つのオプションがあります。PHPは、サーバー側の言語として、着信リクエストを取得して応答を返すプロセッサであることを理解してください。

つまり、最初の「転送」はフレームワーク内転送を使用します。これは、1 つの要求と 1 つの応答しかないことを意味します。内部的に、フレームワークは 1 つのコントローラー アクションを呼び出してから、別のコントローラー アクションを呼び出します。Zend Framework は、このメソッドforwardを呼び出します。

2 番目の「転送」は実際のリダイレクトで、最初の応答にはLocationヘッダーと302http ステータス コードが含まれます。これにより、2 番目の要求が発生し、続いて 2 番目の応答が発生します。Zend Framework は、このメソッドredirectを呼び出します。

したがって、上記では、アクションへの2番目の呼び出しは同じphpプロセス内にあるため、質問で話している転送にはセッションまたはルート一致パラメーターは含まれていないため、すべての変数はすでにわかっています。

フォワードの例

転送する例は、forwardコントローラー プラグインを使用することです。

class MyController
{
  public function myAction()
  {
    return $this->forward()->dispatch('MyModule\Controller\Other', array(
      'action' => 'other',
      'foo'   => 'bar',
      'baz'   => new Bat()
    ));
  }
}

アクセスするために:

class OtherController {
    public function otherAction()
    {
        $foo = $this->params()->fromRoute('foo');
    }
}

お気づきかもしれませんが、実際のオブジェクトを含む追加のパラメーターを forward 呼び出しに追加することができます。

リダイレクトの例

1 つのオプションは、ルート パラメーターを使用することです。そのため、送り返す URL でデータをキャプチャします。あなたはそれを望まないと言っているので、そのためにセッションを使用する必要があります:

use Zend\Session\Container;

class MyController
{
  public function myAction()
  {
    $session = new Container('MyContainer');
    $session->foo = 'bar';
    $session->baz = 'bat';

    return $this->redirect()->toRoute('my/other/route');
  }
}
于 2013-01-06T09:52:28.833 に答える