「転送」には 2 つのオプションがあります。PHPは、サーバー側の言語として、着信リクエストを取得して応答を返すプロセッサであることを理解してください。
つまり、最初の「転送」はフレームワーク内転送を使用します。これは、1 つの要求と 1 つの応答しかないことを意味します。内部的に、フレームワークは 1 つのコントローラー アクションを呼び出してから、別のコントローラー アクションを呼び出します。Zend Framework は、このメソッドforwardを呼び出します。
2 番目の「転送」は実際のリダイレクトで、最初の応答にはLocation
ヘッダーと302
http ステータス コードが含まれます。これにより、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');
}
}