“转发”有两个选项。理解 php 作为服务器端语言是一种处理器,用于抓取传入的请求并返回响应。
也就是说,第一个“转发”使用框架内转发。这意味着只有一个请求和一个响应。在内部,框架调用一个控制器动作,然后调用另一个控制器动作。 Zend Framework 调用此方法forward。
第二个“转发”是真正的重定向,其中第一个响应包含Location 标头和302 http 状态代码。这会产生第二个请求并连续产生第二个响应。 Zend Framework 调用此方法redirect。
因此,您在问题中谈到的 forward 不涉及任何会话或路由匹配参数,因为对操作的第二次调用是在同一个 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');
}
}
您可能会注意到,可以向转发调用添加其他参数,包括真实对象。
重定向示例
一种选择是使用路由参数,因此您可以在发回的 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');
}
}