Redirect 是否可以将数据转发到Zend 2中的另一个控制器/操作?

Redirect 是否可以将数据转发到Zend 2中的另一个控制器/操作?,redirect,zend-framework2,forward,Redirect,Zend Framework2,Forward,我认为一个常见的问题是试图将数据转发(发布)到另一个页面。通常,我会使用会话在页面之间传递数据,但Zend中的这个转发助手看起来很有潜力。有没有办法获取转发请求的相关信息?比如询问转发器(当没有转发器时,通常会返回null) 如果没有当前的实现,有可能吗?这将是一个有趣的项目,也是我一直想要的东西。(在找到更好的解决方案之前,我目前也在使用自己的BcryptDbTableAuth类) 顺便说一下,我不是说添加请求参数。它应该对用户不可见。我仍然在研究可变路由(通配符应该可以做到这一点,但我一直得

我认为一个常见的问题是试图将数据转发(发布)到另一个页面。通常,我会使用会话在页面之间传递数据,但Zend中的这个转发助手看起来很有潜力。有没有办法获取转发请求的相关信息?比如询问转发器(当没有转发器时,通常会返回null)

如果没有当前的实现,有可能吗?这将是一个有趣的项目,也是我一直想要的东西。(在找到更好的解决方案之前,我目前也在使用自己的BcryptDbTableAuth类)

顺便说一下,我不是说添加请求参数。它应该对用户不可见。我仍然在研究可变路由(通配符应该可以做到这一点,但我一直得到“路由无法匹配”…我将进一步探讨这一点)

有两个选项可以“前进”。了解php是一种服务器端语言,它是一种处理器,用于捕获传入的请求并返回响应

也就是说,第一个“转发”用于框架转发。这意味着只有一个请求和一个响应。在内部,框架调用一个控制器操作,然后调用另一个控制器操作。Zend Framework将此方法调用为向前

第二个“转发”是真正的重定向,其中第一个响应包含
位置
头和
302
http状态代码。这将导致第二个请求,并连续产生第二个响应。Zend Framework调用此方法重定向

因此,您在问题中提到的转发不涉及任何会话或路由匹配参数,因为对操作的第二次调用在同一个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');
  }
}

如何访问转发的变量?我试过
$this->params('foo')
运气不好。查看源代码,它似乎将其置于RouteMatch中。我不想在我的模块配置中硬编码可选路由,因为它们是select页面使用的杂项值。我不介意使用通配符路由,但我遇到了这个问题(对我来说,这个问题还没有解决,甚至更新了Zf2),变量应该能够从路由匹配中获取。不再有任何限制,参数应遵循路由本身的参数。它必须与任何类型的路线(文字和段太),我会看看,并给出更新我的答案。