我认为一个常见的问题是试图将数据转发(发布)到另一个页面。通常,我会使用 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/