redirect - 是否可以将数据转发到 Zend 2 中的另一个 Controller /操作?

标签 redirect zend-framework2 forward

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

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

顺便说一下,我不是在谈论添加请求参数。它应该对用户不可见。而且我仍在研究可变路线(通配符应该可以解决问题,但我不断收到“路线无法匹配”的消息......会再深入研究一下)

最佳答案

“转发”有两种选择。理解 php 是作为服务器端语言的处理器,用于获取传入的请求并返回响应。

也就是说,第一个“转发”使用框架内转发。这意味着只有一个请求和一个响应。框架在内部调用一个 Controller 操作,然后再调用另一个。 Zend Framework 调用此方法 转发 .

第二个“转发”是真正的重定向,其中第一个响应包含 Location标题和 302 http 状态码。这会导致第二个请求并连续出现第二个响应。 Zend Framework 调用此方法 重定向 .

因此,在上面,您在问题中谈论的转发不涉及任何 session 或路由匹配参数,因为对操作的第二次调用是在同一个 php 进程中,因此所有变量都是已知的。

转发示例

转发的一个例子是使用 forward Controller 插件:

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 中捕获数据。因为您说您不想要那样,所以您必须为此使用 session :
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');
  }
}

关于redirect - 是否可以将数据转发到 Zend 2 中的另一个 Controller /操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180839/

相关文章:

logging - 如何从 TaskScheduler 运行的脚本重定向 Powershell 输出并覆盖 80 个字符的默认宽度

php - Zend Framework 2 - 表单验证 - 验证器检查是否给出了三个表单字段之一

linux - IPtables 将所有流量转发到一个特定的 IP

javascript - 如果网站无法使用 "https://",如何在 Javascript 中转发我的页面?

zend-framework - zend 框架重定向器->gotoUrl() with target=_blank

redirect - 特定子页面的 Nginx/Django SSL 配置

php - 根据 UserID 进行重定向

zend-framework2 - 多个 Controller 的单一工厂?

doctrine-orm - 学说2标准 - 像运算符

ssh - ssh转发-双向